MIPS: TXx9: Make spi_eeprom.c more generic
authorAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Tue, 19 Aug 2008 13:55:14 +0000 (22:55 +0900)
committerRalf Baechle <ralf@linux-mips.org>
Sat, 11 Oct 2008 15:18:44 +0000 (16:18 +0100)
Helper routines in txx9/rbtx4938/spi_eeprom.c is not TX4938 specific.
Move it to txx9/generic/ directory and make it works with SPI bus
number other than 0.

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
 create mode 100644 arch/mips/txx9/generic/spi_eeprom.c
 delete mode 100644 arch/mips/txx9/rbtx4938/spi_eeprom.c

arch/mips/txx9/generic/Makefile
arch/mips/txx9/generic/spi_eeprom.c [moved from arch/mips/txx9/rbtx4938/spi_eeprom.c with 79% similarity]
arch/mips/txx9/rbtx4938/Makefile
arch/mips/txx9/rbtx4938/setup.c
include/asm-mips/txx9/spi.h

index 9bb34af..986852c 100644 (file)
@@ -8,5 +8,6 @@ obj-$(CONFIG_SOC_TX3927)        += setup_tx3927.o irq_tx3927.o
 obj-$(CONFIG_SOC_TX4927)       += mem_tx4927.o setup_tx4927.o irq_tx4927.o
 obj-$(CONFIG_SOC_TX4938)       += mem_tx4927.o setup_tx4938.o irq_tx4938.o
 obj-$(CONFIG_TOSHIBA_FPCIB0)   += smsc_fdc37m81x.o
+obj-$(CONFIG_SPI)              += spi_eeprom.o
 
 EXTRA_CFLAGS += -Werror
similarity index 79%
rename from arch/mips/txx9/rbtx4938/spi_eeprom.c
rename to arch/mips/txx9/generic/spi_eeprom.c
index a7ea8b0..75c3472 100644 (file)
 #define AT250X0_PAGE_SIZE      8
 
 /* register board information for at25 driver */
-int __init spi_eeprom_register(int chipid)
+int __init spi_eeprom_register(int busid, int chipid, int size)
 {
-       static struct spi_eeprom eeprom = {
-               .name = "at250x0",
-               .byte_len = 128,
-               .page_size = AT250X0_PAGE_SIZE,
-               .flags = EE_ADDR1,
-       };
        struct spi_board_info info = {
                .modalias = "at25",
                .max_speed_hz = 1500000,        /* 1.5Mbps */
-               .bus_num = 0,
+               .bus_num = busid,
                .chip_select = chipid,
-               .platform_data = &eeprom,
                /* Mode 0: High-Active, Sample-Then-Shift */
        };
-
+       struct spi_eeprom *eeprom;
+       eeprom = kzalloc(sizeof(*eeprom), GFP_KERNEL);
+       if (!eeprom)
+               return -ENOMEM;
+       strcpy(eeprom->name, "at250x0");
+       eeprom->byte_len = size;
+       eeprom->page_size = AT250X0_PAGE_SIZE;
+       eeprom->flags = EE_ADDR1;
+       info.platform_data = eeprom;
        return spi_register_board_info(&info, 1);
 }
 
 /* simple temporary spi driver to provide early access to seeprom. */
 
 static struct read_param {
+       int busid;
        int chipid;
        int address;
        unsigned char *buf;
@@ -57,7 +59,8 @@ static int __init early_seeprom_probe(struct spi_device *spi)
 
        dev_info(&spi->dev, "spiclk %u KHz.\n",
                 (spi->max_speed_hz + 500) / 1000);
-       if (read_param->chipid != spi->chip_select)
+       if (read_param->busid != spi->master->bus_num ||
+           read_param->chipid != spi->chip_select)
                return -ENODEV;
        while (len > 0) {
                /* spi_write_then_read can only work with small chunk */
@@ -80,11 +83,12 @@ static struct spi_driver early_seeprom_driver __initdata = {
        .probe  = early_seeprom_probe,
 };
 
-int __init spi_eeprom_read(int chipid, int address,
+int __init spi_eeprom_read(int busid, int chipid, int address,
                           unsigned char *buf, int len)
 {
        int ret;
        struct read_param param = {
+               .busid = busid,
                .chipid = chipid,
                .address = address,
                .buf = buf,
index 9dcc52a..f3e1f59 100644 (file)
@@ -1,3 +1,3 @@
-obj-y  += prom.o setup.o irq.o spi_eeprom.o
+obj-y  += prom.o setup.o irq.o
 
 EXTRA_CFLAGS += -Werror
index 7aba92a..ec6e812 100644 (file)
@@ -111,6 +111,7 @@ static void __init rbtx4938_pci_setup(void)
 #define        SEEPROM2_CS     0       /* IOC */
 #define        SEEPROM3_CS     1       /* IOC */
 #define        SRTC_CS 2       /* IOC */
+#define SPI_BUSNO      0
 
 static int __init rbtx4938_ethaddr_init(void)
 {
@@ -120,7 +121,7 @@ static int __init rbtx4938_ethaddr_init(void)
        int i;
 
        /* 0-3: "MAC\0", 4-9:eth0, 10-15:eth1, 16:sum */
-       if (spi_eeprom_read(SEEPROM1_CS, 0, dat, sizeof(dat))) {
+       if (spi_eeprom_read(SPI_BUSNO, SEEPROM1_CS, 0, dat, sizeof(dat))) {
                printk(KERN_ERR "seeprom: read error.\n");
                return -ENODEV;
        } else {
@@ -287,9 +288,9 @@ static int __init rbtx4938_spi_init(void)
                .mode = SPI_MODE_1 | SPI_CS_HIGH,
        };
        spi_register_board_info(&srtc_info, 1);
-       spi_eeprom_register(SEEPROM1_CS);
-       spi_eeprom_register(16 + SEEPROM2_CS);
-       spi_eeprom_register(16 + SEEPROM3_CS);
+       spi_eeprom_register(SPI_BUSNO, SEEPROM1_CS, 128);
+       spi_eeprom_register(SPI_BUSNO, 16 + SEEPROM2_CS, 128);
+       spi_eeprom_register(SPI_BUSNO, 16 + SEEPROM3_CS, 128);
        gpio_request(16 + SRTC_CS, "rtc-rs5c348");
        gpio_direction_output(16 + SRTC_CS, 0);
        gpio_request(SEEPROM1_CS, "seeprom1");
@@ -298,7 +299,7 @@ static int __init rbtx4938_spi_init(void)
        gpio_direction_output(16 + SEEPROM2_CS, 1);
        gpio_request(16 + SEEPROM3_CS, "seeprom3");
        gpio_direction_output(16 + SEEPROM3_CS, 1);
-       tx4938_spi_init(0);
+       tx4938_spi_init(SPI_BUSNO);
        return 0;
 }
 
index ddfb2a0..0d727f3 100644 (file)
 #ifndef __ASM_TXX9_SPI_H
 #define __ASM_TXX9_SPI_H
 
-extern int spi_eeprom_register(int chipid);
-extern int spi_eeprom_read(int chipid, int address, unsigned char *buf, int len);
+#include <linux/errno.h>
+
+#ifdef CONFIG_SPI
+int spi_eeprom_register(int busid, int chipid, int size);
+int spi_eeprom_read(int busid, int chipid,
+                   int address, unsigned char *buf, int len);
+#else
+static inline int spi_eeprom_register(int busid, int chipid, int size)
+{
+       return -ENODEV;
+}
+static inline int spi_eeprom_read(int busid, int chipid,
+                                 int address, unsigned char *buf, int len)
+{
+       return -ENODEV;
+}
+#endif
 
 #endif /* __ASM_TXX9_SPI_H */