public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver.
@ 2009-05-27  9:22 Grzegorz Bernacki
  2009-05-27  9:22 ` [U-Boot] [PATCH 2/3] digsy MTC: Add SPI support Grzegorz Bernacki
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Grzegorz Bernacki @ 2009-05-27  9:22 UTC (permalink / raw)
  To: u-boot


Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com>
---
 drivers/spi/Makefile      |    1 +
 drivers/spi/mpc52xx_spi.c |  108 +++++++++++++++++++++++++++++++++++++++++++++
 include/mpc5xxx.h         |   18 +++++++
 3 files changed, 127 insertions(+), 0 deletions(-)
 create mode 100644 drivers/spi/mpc52xx_spi.c

diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
index 1350f3e..1272c17 100644
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -28,6 +28,7 @@ LIB	:= $(obj)libspi.a
 COBJS-$(CONFIG_ATMEL_DATAFLASH_SPI) += atmel_dataflash_spi.o
 COBJS-$(CONFIG_ATMEL_SPI) += atmel_spi.o
 COBJS-$(CONFIG_BFIN_SPI) += bfin_spi.o
+COBJS-$(CONFIG_MPC52XX_SPI) += mpc52xx_spi.o
 COBJS-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o
 COBJS-$(CONFIG_MXC_SPI) += mxc_spi.o
 COBJS-$(CONFIG_SOFT_SPI) += soft_spi.o
diff --git a/drivers/spi/mpc52xx_spi.c b/drivers/spi/mpc52xx_spi.c
new file mode 100644
index 0000000..6dae7ad
--- /dev/null
+++ b/drivers/spi/mpc52xx_spi.c
@@ -0,0 +1,108 @@
+/*
+ * (C) Copyright 2009
+ * Frank Bodammer <frank.bodammer@gcd-solutions.de>
+ * (C) Copyright 2009 Semihalf, Grzegorz Bernacki
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <spi.h>
+#include <mpc5xxx.h>
+
+void spi_init(void)
+{
+	struct mpc5xxx_spi *spi = (struct mpc5xxx_spi *)MPC5XXX_SPI;
+	/*
+	 * Its important to use the correct order when initializing the
+	 * registers
+	 */
+	spi->ddr = 0x0F;	/* set all SPI pins as output */
+	spi->pdr = 0x00;	/* set SS low */
+	/* SPI is master, SS is general purpose output */
+	spi->cr1 = SPI_CR_MSTR | SPI_CR_SPE;
+	spi->cr2 = 0x00;	/* normal operation */
+	spi->brr = 0x77;	/* baud rate: IPB clock / 2048 */
+}
+
+struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
+				  unsigned int max_hz, unsigned int mode)
+{
+	struct spi_slave *slave;
+
+	slave = malloc(sizeof(struct spi_slave));
+	if (!slave)
+		return NULL;
+
+	slave->bus = bus;
+	slave->cs = cs;
+
+	return slave;
+}
+
+void spi_free_slave(struct spi_slave *slave)
+{
+	free(slave);
+}
+
+int spi_claim_bus(struct spi_slave *slave)
+{
+	return 0;
+}
+
+void spi_release_bus(struct spi_slave *slave)
+{
+	return;
+}
+
+int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
+	     void *din, unsigned long flags)
+{
+	struct mpc5xxx_spi *spi = (struct mpc5xxx_spi *)MPC5XXX_SPI;
+	int i, iter = bitlen >> 3;
+	const uchar *txp = dout;
+	uchar *rxp = din;
+
+	debug("spi_xfer: slave %u:%u dout %08X din %08X bitlen %u\n",
+	      slave->bus, slave->cs, *(uint *) dout, *(uint *) din, bitlen);
+
+	if (flags & SPI_XFER_BEGIN)
+		spi->pdr |= SPI_PDR_SS;
+
+	for (i = 0; i < iter; i++) {
+		udelay(1000);
+		debug("spi_xfer: sending %x\n", txp[i]);
+		spi->dr = txp[i];
+		while (!(spi->sr & SPI_SR_SPIF)) {
+			udelay(1000);
+			if (spi->sr & SPI_SR_WCOL) {
+				rxp[i] = spi->dr;
+				puts("spi_xfer: write collision\n");
+				return -1;
+			}
+		}
+		rxp[i] = spi->dr;
+		debug("spi_xfer: received %x\n", rxp[i]);
+	}
+	if (flags & SPI_XFER_END)
+		spi->pdr &= ~SPI_PDR_SS;
+
+	return 0;
+}
diff --git a/include/mpc5xxx.h b/include/mpc5xxx.h
index 463d5ae..476d149 100644
--- a/include/mpc5xxx.h
+++ b/include/mpc5xxx.h
@@ -392,6 +392,24 @@
 #define I2C_IF		0x02
 #define I2C_RXAK	0x01
 
+/* SPI control register 1 bits */
+#define SPI_CR_LSBFE	0x01
+#define SPI_CR_SSOE	0x02
+#define SPI_CR_CPHA	0x04
+#define SPI_CR_CPOL	0x08
+#define SPI_CR_MSTR	0x10
+#define SPI_CR_SWOM	0x20
+#define SPI_CR_SPE	0x40
+#define SPI_CR_SPIE	0x80
+
+/* SPI status register bits */
+#define SPI_SR_MODF	0x10
+#define SPI_SR_WCOL	0x40
+#define SPI_SR_SPIF	0x80
+
+/* SPI port data register bits */
+#define SPI_PDR_SS	0x08
+
 /* Programmable Serial Controller (PSC) status register bits */
 #define PSC_SR_CDE		0x0080
 #define PSC_SR_RXRDY		0x0100
-- 
1.6.0.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 2/3] digsy MTC: Add SPI support.
  2009-05-27  9:22 [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver Grzegorz Bernacki
@ 2009-05-27  9:22 ` Grzegorz Bernacki
  2009-06-08 15:57   ` Detlev Zundel
  2009-05-27  9:22 ` [U-Boot] [PATCH 3/3] digsy MTC: Add 'mtc' command Grzegorz Bernacki
  2009-06-08 15:58 ` [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver Detlev Zundel
  2 siblings, 1 reply; 6+ messages in thread
From: Grzegorz Bernacki @ 2009-05-27  9:22 UTC (permalink / raw)
  To: u-boot


Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com>
---
 board/digsy_mtc/digsy_mtc.c |   14 ++++++++++++++
 include/configs/digsy_mtc.h |    7 +++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/board/digsy_mtc/digsy_mtc.c b/board/digsy_mtc/digsy_mtc.c
index 83d5864..36bbbc5 100644
--- a/board/digsy_mtc/digsy_mtc.c
+++ b/board/digsy_mtc/digsy_mtc.c
@@ -186,6 +186,10 @@ int checkboard(void)
 
 int board_early_init_r(void)
 {
+#ifdef CONFIG_MPC52XX_SPI
+	struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio*)MPC5XXX_GPIO;
+	struct mpc5xxx_gpt *gpt = (struct mpc5xxx_gpt*)MPC5XXX_GPT;
+#endif
 	/*
 	 * Now, when we are in RAM, enable flash write access for detection
 	 * process.  Note that CS_BOOT cannot be cleared when executing in
@@ -202,6 +206,16 @@ int board_early_init_r(void)
 	/* Low level USB init, required for proper kernel operation */
 	usb_cpu_init();
 #endif
+#ifdef CONFIG_MPC52XX_SPI
+	/* SPI on Tmr2/3/4/5 pins */
+	gpio->port_config |= 0x20000000;
+
+	/* GPT 6 Output Enable */
+	gpt[6].emsr = 0x00000034 ;
+	/* GPT 7 Output Enable */
+	gpt[7].emsr = 0x00000034 ;
+#endif
+
 	return (0);
 }
 
diff --git a/include/configs/digsy_mtc.h b/include/configs/digsy_mtc.h
index 66badd7..0cc2a8d 100644
--- a/include/configs/digsy_mtc.h
+++ b/include/configs/digsy_mtc.h
@@ -100,6 +100,7 @@
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_REGINFO
 #define CONFIG_CMD_SAVES
+#define CONFIG_CMD_SPI
 #define CONFIG_CMD_USB
 
 #if (TEXT_BASE == 0xFF000000)
@@ -137,6 +138,12 @@
 	""
 
 /*
+ * SPI configuration
+ */
+#define CONFIG_HARD_SPI		1
+#define CONFIG_MPC52XX_SPI	1
+
+/*
  * I2C configuration
  */
 #define CONFIG_HARD_I2C		1
-- 
1.6.0.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 3/3] digsy MTC: Add 'mtc' command.
  2009-05-27  9:22 [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver Grzegorz Bernacki
  2009-05-27  9:22 ` [U-Boot] [PATCH 2/3] digsy MTC: Add SPI support Grzegorz Bernacki
@ 2009-05-27  9:22 ` Grzegorz Bernacki
  2009-06-08 16:06   ` Detlev Zundel
  2009-06-08 15:58 ` [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver Detlev Zundel
  2 siblings, 1 reply; 6+ messages in thread
From: Grzegorz Bernacki @ 2009-05-27  9:22 UTC (permalink / raw)
  To: u-boot

New command allows to:
 o check FW version
 o set LED status
 o set digital output status
 o get digital input status

Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com>
---
 board/digsy_mtc/Makefile  |    2 +-
 board/digsy_mtc/cmd_mtc.c |  287 +++++++++++++++++++++++++++++++++++++++++++++
 board/digsy_mtc/cmd_mtc.h |   60 ++++++++++
 3 files changed, 348 insertions(+), 1 deletions(-)
 create mode 100644 board/digsy_mtc/cmd_mtc.c
 create mode 100644 board/digsy_mtc/cmd_mtc.h

diff --git a/board/digsy_mtc/Makefile b/board/digsy_mtc/Makefile
index 7d659e5..0bededc 100644
--- a/board/digsy_mtc/Makefile
+++ b/board/digsy_mtc/Makefile
@@ -7,7 +7,7 @@ include $(TOPDIR)/config.mk
 
 LIB	= $(obj)lib$(BOARD).a
 
-COBJS	:= $(BOARD).o
+COBJS	:= $(BOARD).o cmd_mtc.o
 
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS))
diff --git a/board/digsy_mtc/cmd_mtc.c b/board/digsy_mtc/cmd_mtc.c
new file mode 100644
index 0000000..c05d5da
--- /dev/null
+++ b/board/digsy_mtc/cmd_mtc.c
@@ -0,0 +1,287 @@
+/*
+ * (C) Copyright 2009
+ * Werner Pfister <Pfister_Werner@intercontrol.de>
+ *
+ * (C) Copyright 2009 Semihalf, Grzegorz Bernacki
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <mpc5xxx.h>
+#include "spi.h"
+#include "cmd_mtc.h"
+
+static const char *led_names[] = {
+	"diag",
+	"can1",
+	"can2",
+	"can3",
+	"can4",
+	"usbpwr",
+	"usbbusy",
+	"user1",
+	"user2",
+	""
+};
+
+static void mtc_calculate_checksum(tx_msp_cmd *packet)
+{
+	int i;
+	uchar *buff;
+
+	buff = (uchar *) packet;
+
+	for (i = 0; i < 6; i++)
+		packet->cks += buff[i];
+}
+
+static int subcmd_led(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	tx_msp_cmd pcmd;
+	rx_msp_cmd prx;
+	int err = 0;
+	int i;
+
+	if (argc <= 2) {
+		printf("Usage:\n%s\n", cmdtp->help);
+		return -1;
+	}
+
+	memset(&pcmd, 0, sizeof(pcmd));
+	memset(&prx, 0, sizeof(prx));
+
+	pcmd.cmd = CMD_SET_LED;
+
+	pcmd.cmd_val0 = 0xff;
+	for (i = 0; strlen(led_names[i]) != 0; i++) {
+		if (strncmp(argv[2], led_names[i], strlen(led_names[i])) == 0) {
+			pcmd.cmd_val0 = i;
+			break;
+		}
+	}
+
+	if (pcmd.cmd_val0 == 0xff) {
+		printf("Usage:\n%s\n", cmdtp->help);
+		return -1;
+	}
+
+	if (argc >= 4) {
+		if (strncmp(argv[3], "red", 3) == 0)
+			pcmd.cmd_val1 = 1;
+		else if (strncmp(argv[3], "green", 5) == 0)
+			pcmd.cmd_val1 = 2;
+		else if (strncmp(argv[3], "orange", 6) == 0)
+			pcmd.cmd_val1 = 3;
+		else
+			pcmd.cmd_val1 = 0;
+	}
+
+	if (argc >= 5)
+		pcmd.cmd_val2 = simple_strtol(argv[4], NULL, 10);
+	else
+		pcmd.cmd_val2 = 0;
+
+	mtc_calculate_checksum(&pcmd);
+	err = spi_xfer(NULL, MTC_TRANSFER_SIZE, &pcmd, &prx,
+		       SPI_XFER_BEGIN | SPI_XFER_END);
+
+	return err;
+}
+
+static int subcmd_key(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	tx_msp_cmd pcmd;
+	rx_msp_cmd prx;
+	int err = 0;
+
+	memset(&pcmd, 0, sizeof(pcmd));
+	memset(&prx, 0, sizeof(prx));
+
+	pcmd.cmd = CMD_GET_VIM;
+
+	mtc_calculate_checksum(&pcmd);
+	err = spi_xfer(NULL, MTC_TRANSFER_SIZE, &pcmd, &prx,
+		       SPI_XFER_BEGIN | SPI_XFER_END);
+
+	if (!err) {
+		/* function returns '0' if key is pressed */
+		err = (prx.input & 0x80) ? 0 : 1;
+	}
+
+	return err;
+}
+
+static int subcmd_digout(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	tx_msp_cmd pcmd;
+	rx_msp_cmd prx;
+	int err = 0;
+	uchar channel_mask = 0;
+
+	if (argc < 4) {
+		printf("Usage:\n%s\n", cmdtp->help);
+		return -1;
+	}
+
+	if (strncmp(argv[2], "on", 2) == 0)
+		channel_mask |= 1;
+	if (strncmp(argv[3], "on", 2) == 0)
+		channel_mask |= 2;
+
+	memset(&pcmd, 0, sizeof(pcmd));
+	memset(&prx, 0, sizeof(prx));
+
+	pcmd.cmd = CMD_GET_VIM;
+	pcmd.user_out = channel_mask;
+
+	mtc_calculate_checksum(&pcmd);
+	err = spi_xfer(NULL, MTC_TRANSFER_SIZE, &pcmd, &prx,
+		       SPI_XFER_BEGIN | SPI_XFER_END);
+
+	return err;
+}
+
+static int subcmd_digin(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	tx_msp_cmd pcmd;
+	rx_msp_cmd prx;
+	int err = 0;
+	uchar channel_num = 0;
+
+	if (argc < 3) {
+		printf("Usage:\n%s\n", cmdtp->help);
+		return -1;
+	}
+
+	channel_num = simple_strtol(argv[2], NULL, 10);
+	if ((channel_num != 1) && (channel_num != 2)) {
+		printf("invalid parameter\n");
+		return -1;
+	}
+
+	memset(&pcmd, 0, sizeof(pcmd));
+	memset(&prx, 0, sizeof(prx));
+
+	pcmd.cmd = CMD_GET_VIM;
+
+	mtc_calculate_checksum(&pcmd);
+	err = spi_xfer(NULL, MTC_TRANSFER_SIZE, &pcmd, &prx,
+		       SPI_XFER_BEGIN | SPI_XFER_END);
+
+	if (!err) {
+		/* function returns '0' when digin is on */
+		err = (prx.input & channel_num) ? 0 : 1;
+	}
+
+	return err;
+}
+
+static int subcmd_appreg(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	tx_msp_cmd pcmd;
+	rx_msp_cmd prx;
+	int err;
+	char buf[5];
+
+	/* read appreg */
+	memset(&pcmd, 0, sizeof(pcmd));
+	memset(&prx, 0, sizeof(prx));
+
+	pcmd.cmd = CMD_WD_PARA;
+	pcmd.cmd_val0 = 5;	/* max. Count */
+	pcmd.cmd_val1 = 5;	/* max. Time */
+	pcmd.cmd_val2 = 0;	/* =0 means read appreg */
+
+	mtc_calculate_checksum(&pcmd);
+	err = spi_xfer(NULL, MTC_TRANSFER_SIZE, &pcmd, &prx,
+		       SPI_XFER_BEGIN | SPI_XFER_END);
+	if (!err) {
+		sprintf(buf, "%d", prx.ack2);
+		setenv("appreg", buf);
+	}
+
+	return err;
+}
+
+static int subcmd_version(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	tx_msp_cmd pcmd;
+	rx_msp_cmd prx;
+	int err = 0;
+
+	memset(&pcmd, 0, sizeof(pcmd));
+	memset(&prx, 0, sizeof(prx));
+
+	pcmd.cmd = CMD_FW_VERSION;
+
+	mtc_calculate_checksum(&pcmd);
+	err = spi_xfer(NULL, MTC_TRANSFER_SIZE, &pcmd, &prx,
+		       SPI_XFER_BEGIN | SPI_XFER_END);
+
+	if (!err) {
+		printf("FW V%d.%d.%d / HW %d\n",
+		       prx.ack0, prx.ack1, prx.ack3, prx.ack2);
+	}
+
+	return err;
+}
+
+int cmd_mtc(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	int err = 0;
+
+	if (argc > 1) {
+		if (strncmp(argv[1], "led", 3) == 0)
+			err = subcmd_led(cmdtp, flag, argc, argv);
+		else if (strncmp(argv[1], "key", 3) == 0)
+			err = subcmd_key(cmdtp, flag, argc, argv);
+		else if (strncmp(argv[1], "version", 7) == 0)
+			err = subcmd_version(cmdtp, flag, argc, argv);
+		else if (strncmp(argv[1], "appreg", 6) == 0)
+			err = subcmd_appreg(cmdtp, flag, argc, argv);
+		else if (strncmp(argv[1], "digin", 5) == 0)
+			err = subcmd_digin(cmdtp, flag, argc, argv);
+		else if (strncmp(argv[1], "digout", 6) == 0)
+			err = subcmd_digout(cmdtp, flag, argc, argv);
+		else {
+			printf("Usage:\n%s\n", cmdtp->help);
+			err = 1;
+		}
+	} else {
+		printf("Usage:\n%s\n", cmdtp->help);
+		err = 1;
+	}
+
+	return err;
+}
+
+U_BOOT_CMD(mtc, 5, 1, cmd_mtc,
+	   "mtc     - special commands for digsyMTC\n",
+	   "mtc led [ledname] [state] [blink] - set state of leds\n"
+	   "    - lednames: diag can1 can2 can3 can4 usbpwr usbbusy user1 user2\n"
+	   "    - state: off red green orange\n"
+	   "    - blink: blink interval in 100ms steps (1 - 10; 0 = static)\n"
+	   "mtc key - returns state of user key\n"
+	   "mtc version - returns firmware version of supervisor uC\n"
+	   "mtc appreg - reads appreg value and stores in environment variable"
+	   "'appreg'\n"
+	   "mtc digin channel - returns state of digital input (1 or 2)\n"
+	   "mtc digout ch1 ch2 - sets digital outputs ('on' or 'off')\n");
diff --git a/board/digsy_mtc/cmd_mtc.h b/board/digsy_mtc/cmd_mtc.h
new file mode 100644
index 0000000..db3aeed
--- /dev/null
+++ b/board/digsy_mtc/cmd_mtc.h
@@ -0,0 +1,60 @@
+/*
+ * (C) Copyright 2009
+ * Werner Pfister <Pfister_Werner@intercontrol.de>
+ *
+ * (C) Copyright 2009 Semihalf, Grzegorz Bernacki
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef CMD_MTC_H
+#define CMD_MTC_H
+
+#define	CMD_WD_PARA		0x02
+#define	CMD_FW_VERSION		0x10
+#define	CMD_GET_VIM		0x30
+#define	CMD_SET_LED		0x40
+
+typedef struct {
+	u8 cmd;
+	u8 sys_in;
+	u8 cmd_val0;
+	u8 cmd_val1;
+	u8 cmd_val2;
+	u8 user_out;
+	u8 cks;
+	u8 dummy1;
+	u8 dummy2;
+} tx_msp_cmd;
+
+typedef struct {
+	u8 input;
+	u8 state;
+	u8 ack2;
+	u8 ack3;
+	u8 ack0;
+	u8 ack1;
+	u8 ack;
+	u8 dummy;
+	u8 cks;
+} rx_msp_cmd;
+
+#define MTC_TRANSFER_SIZE (sizeof(tx_msp_cmd) * 8)
+
+#endif
-- 
1.6.0.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 2/3] digsy MTC: Add SPI support.
  2009-05-27  9:22 ` [U-Boot] [PATCH 2/3] digsy MTC: Add SPI support Grzegorz Bernacki
@ 2009-06-08 15:57   ` Detlev Zundel
  0 siblings, 0 replies; 6+ messages in thread
From: Detlev Zundel @ 2009-06-08 15:57 UTC (permalink / raw)
  To: u-boot

Hi Grzegorz,

> Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com>
> ---
>  board/digsy_mtc/digsy_mtc.c |   14 ++++++++++++++
>  include/configs/digsy_mtc.h |    7 +++++++
>  2 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/board/digsy_mtc/digsy_mtc.c b/board/digsy_mtc/digsy_mtc.c
> index 83d5864..36bbbc5 100644
> --- a/board/digsy_mtc/digsy_mtc.c
> +++ b/board/digsy_mtc/digsy_mtc.c
> @@ -186,6 +186,10 @@ int checkboard(void)
>  
>  int board_early_init_r(void)
>  {
> +#ifdef CONFIG_MPC52XX_SPI
> +	struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio*)MPC5XXX_GPIO;
> +	struct mpc5xxx_gpt *gpt = (struct mpc5xxx_gpt*)MPC5XXX_GPT;
> +#endif
>  	/*
>  	 * Now, when we are in RAM, enable flash write access for detection
>  	 * process.  Note that CS_BOOT cannot be cleared when executing in
> @@ -202,6 +206,16 @@ int board_early_init_r(void)
>  	/* Low level USB init, required for proper kernel operation */
>  	usb_cpu_init();
>  #endif
> +#ifdef CONFIG_MPC52XX_SPI
> +	/* SPI on Tmr2/3/4/5 pins */
> +	gpio->port_config |= 0x20000000;
> +
> +	/* GPT 6 Output Enable */
> +	gpt[6].emsr = 0x00000034 ;
> +	/* GPT 7 Output Enable */
> +	gpt[7].emsr = 0x00000034 ;
> +#endif

You want to use accessor macros here.

Cheers
  Detlev

-- 
The latest code  looks a bit similar to the old  [linux] big-reader-locks  hack
(which got dropped for good many eons ago and with which i deny any involvement
with, such as having authored it. [oh, did i say that out loud? crap.]), imple-
mented cleanly and properly.     -- Ingo Molnar <20090428124033.GA1655@elte.hu>
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver.
  2009-05-27  9:22 [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver Grzegorz Bernacki
  2009-05-27  9:22 ` [U-Boot] [PATCH 2/3] digsy MTC: Add SPI support Grzegorz Bernacki
  2009-05-27  9:22 ` [U-Boot] [PATCH 3/3] digsy MTC: Add 'mtc' command Grzegorz Bernacki
@ 2009-06-08 15:58 ` Detlev Zundel
  2 siblings, 0 replies; 6+ messages in thread
From: Detlev Zundel @ 2009-06-08 15:58 UTC (permalink / raw)
  To: u-boot

Hi Grzegorz,

> Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com>
> ---
>  drivers/spi/Makefile      |    1 +
>  drivers/spi/mpc52xx_spi.c |  108 +++++++++++++++++++++++++++++++++++++++++++++
>  include/mpc5xxx.h         |   18 +++++++
>  3 files changed, 127 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/spi/mpc52xx_spi.c
>
> diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
> index 1350f3e..1272c17 100644
> --- a/drivers/spi/Makefile
> +++ b/drivers/spi/Makefile
> @@ -28,6 +28,7 @@ LIB	:= $(obj)libspi.a
>  COBJS-$(CONFIG_ATMEL_DATAFLASH_SPI) += atmel_dataflash_spi.o
>  COBJS-$(CONFIG_ATMEL_SPI) += atmel_spi.o
>  COBJS-$(CONFIG_BFIN_SPI) += bfin_spi.o
> +COBJS-$(CONFIG_MPC52XX_SPI) += mpc52xx_spi.o
>  COBJS-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o
>  COBJS-$(CONFIG_MXC_SPI) += mxc_spi.o
>  COBJS-$(CONFIG_SOFT_SPI) += soft_spi.o
> diff --git a/drivers/spi/mpc52xx_spi.c b/drivers/spi/mpc52xx_spi.c
> new file mode 100644
> index 0000000..6dae7ad
> --- /dev/null
> +++ b/drivers/spi/mpc52xx_spi.c
> @@ -0,0 +1,108 @@
> +/*
> + * (C) Copyright 2009
> + * Frank Bodammer <frank.bodammer@gcd-solutions.de>
> + * (C) Copyright 2009 Semihalf, Grzegorz Bernacki
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <malloc.h>
> +#include <spi.h>
> +#include <mpc5xxx.h>
> +
> +void spi_init(void)
> +{
> +	struct mpc5xxx_spi *spi = (struct mpc5xxx_spi *)MPC5XXX_SPI;
> +	/*
> +	 * Its important to use the correct order when initializing the
> +	 * registers
> +	 */
> +	spi->ddr = 0x0F;	/* set all SPI pins as output */

Here and below you want to use accessor macros - please check the whole
patch.

Cheers
  Detlev

-- 
The latest code  looks a bit similar to the old  [linux] big-reader-locks  hack
(which got dropped for good many eons ago and with which i deny any involvement
with, such as having authored it. [oh, did i say that out loud? crap.]), imple-
mented cleanly and properly.     -- Ingo Molnar <20090428124033.GA1655@elte.hu>
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 3/3] digsy MTC: Add 'mtc' command.
  2009-05-27  9:22 ` [U-Boot] [PATCH 3/3] digsy MTC: Add 'mtc' command Grzegorz Bernacki
@ 2009-06-08 16:06   ` Detlev Zundel
  0 siblings, 0 replies; 6+ messages in thread
From: Detlev Zundel @ 2009-06-08 16:06 UTC (permalink / raw)
  To: u-boot

Hi Grzegorz,

> New command allows to:
>  o check FW version
>  o set LED status
>  o set digital output status
>  o get digital input status
>
> Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com>
> ---
>  board/digsy_mtc/Makefile  |    2 +-
>  board/digsy_mtc/cmd_mtc.c |  287 +++++++++++++++++++++++++++++++++++++++++++++
>  board/digsy_mtc/cmd_mtc.h |   60 ++++++++++
>  3 files changed, 348 insertions(+), 1 deletions(-)
>  create mode 100644 board/digsy_mtc/cmd_mtc.c
>  create mode 100644 board/digsy_mtc/cmd_mtc.h

[...]

> +int cmd_mtc(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> +{
> +	int err = 0;
> +
> +	if (argc > 1) {
> +		if (strncmp(argv[1], "led", 3) == 0)
> +			err = subcmd_led(cmdtp, flag, argc, argv);
> +		else if (strncmp(argv[1], "key", 3) == 0)
> +			err = subcmd_key(cmdtp, flag, argc, argv);
> +		else if (strncmp(argv[1], "version", 7) == 0)
> +			err = subcmd_version(cmdtp, flag, argc, argv);
> +		else if (strncmp(argv[1], "appreg", 6) == 0)
> +			err = subcmd_appreg(cmdtp, flag, argc, argv);
> +		else if (strncmp(argv[1], "digin", 5) == 0)
> +			err = subcmd_digin(cmdtp, flag, argc, argv);
> +		else if (strncmp(argv[1], "digout", 6) == 0)
> +			err = subcmd_digout(cmdtp, flag, argc, argv);
> +		else {
> +			printf("Usage:\n%s\n", cmdtp->help);
> +			err = 1;
> +		}
> +	} else {
> +		printf("Usage:\n%s\n", cmdtp->help);
> +		err = 1;
> +	}
> +
> +	return err;
> +}

Please use your own cmd_tblt_t to implement sub-commands re-using
existing infrastructure.  Check board/inka4x0/inkadiag.c for an example.

Cheers
  Detlev

-- 
X-Windows has to be the most expensive way ever of popping up an Emacs
window.
                                          -- The UNIX Haters Handbook
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-06-08 16:06 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-27  9:22 [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver Grzegorz Bernacki
2009-05-27  9:22 ` [U-Boot] [PATCH 2/3] digsy MTC: Add SPI support Grzegorz Bernacki
2009-06-08 15:57   ` Detlev Zundel
2009-05-27  9:22 ` [U-Boot] [PATCH 3/3] digsy MTC: Add 'mtc' command Grzegorz Bernacki
2009-06-08 16:06   ` Detlev Zundel
2009-06-08 15:58 ` [U-Boot] [PATCH 1/3] mpc52xx: Add SPI driver Detlev Zundel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox