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