* [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 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 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 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
* [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
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