modify dm9000 for info_sdk
authorlyx <lyx@rock-chips.com>
Mon, 9 Aug 2010 08:29:53 +0000 (01:29 -0700)
committerlyx <lyx@rock-chips.com>
Mon, 9 Aug 2010 08:30:19 +0000 (01:30 -0700)
arch/arm/mach-rk2818/board-infosdk.c [changed mode: 0644->0755]
arch/arm/mach-rk2818/board-midsdk.c [changed mode: 0644->0755]
arch/arm/mach-rk2818/board-phonesdk.c
arch/arm/mach-rk2818/board-raho.c
arch/arm/mach-rk2818/devices.c
arch/arm/mach-rk2818/devices.h
drivers/net/Kconfig [changed mode: 0644->0755]
drivers/net/dm9000.c
include/linux/dm9000.h [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index ad6fb52..b009ad9
@@ -37,6 +37,7 @@
 
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
+#include <linux/dm9000.h>
 
 #include "devices.h"
 
@@ -448,11 +449,104 @@ struct rk2818bl_info rk2818_bl_info = {
         .pw_iomux = GPIOF34_UART3_SEL_NAME,
 };
 
-static struct platform_device *devices[] __initdata = {
-       &rk2818_device_uart1,
+/********************************************************
+*                              dm9000 net work devices
+*                              author:lyx
+********************************************************/
 #ifdef CONFIG_DM9000
-       &rk2818_device_dm9k,
+/*
+GPIOA5_FLASHCS1_SEL_NAME     IOMUXB_FLASH_CS1
+GPIOA6_FLASHCS2_SEL_NAME     IOMUXB_FLASH_CS2
+GPIOA7_FLASHCS3_SEL_NAME     IOMUXB_FLASH_CS3
+GPIOE_SPI1_FLASH_SEL1_NAME   IOMUXA_FLASH_CS45
+GPIOE_SPI1_FLASH_SEL_NAME    IOMUXA_FLASH_CS67
+*/
+#define DM9000_USE_NAND_CS 1     //cs can be 1,2,3,4,5,6 or 7
+#define DM9000_CS_IOMUX_NAME GPIOA5_FLASHCS1_SEL_NAME
+#define DM9000_CS_IOMUX_MODE IOMUXB_FLASH_CS1
+#define DM9000_NET_INT_PIN RK2818_PIN_PE2
+#define DM9000_INT_IOMUX_NAME GPIOA23_UART2_SEL_NAME
+#define DM9000_INT_IOMUX_MODE IOMUXB_GPIO0_A23
+#define DM9000_INT_INIT_VALUE GPIOPullDown
+#define DM9000_IRQ IRQF_TRIGGER_HIGH
+#define DM9000_IO_ADDR (RK2818_NANDC_PHYS + 0x800 + DM9000_USE_NAND_CS*0x100 + 0x8)
+#define DM9000_DATA_ADDR (RK2818_NANDC_PHYS + 0x800 + DM9000_USE_NAND_CS*0x100 + 0x4)
+
+int dm9k_gpio_set(void)
+{
+       //cs
+       rk2818_mux_api_set(DM9000_CS_IOMUX_NAME, DM9000_CS_IOMUX_MODE);
+
+       //int
+       rk2818_mux_api_set(DM9000_INT_IOMUX_NAME, DM9000_INT_IOMUX_MODE);
+       
+       if (gpio_request(DM9000_NET_INT_PIN, "dm9000 interrupt")) {
+               gpio_free(DM9000_NET_INT_PIN);
+               rk2818_mux_api_mode_resume(DM9000_INT_IOMUX_NAME);
+               rk2818_mux_api_mode_resume(DM9000_CS_IOMUX_NAME);
+               printk("[fun:%s line:%d], request gpio for net interrupt fail\n", __func__,__LINE__);
+
+               return -1;
+       }       
+       gpio_pull_updown(DM9000_NET_INT_PIN, DM9000_INT_INIT_VALUE);
+       gpio_direction_input(DM9000_NET_INT_PIN);
+       
+       return 0;
+}
+int dm9k_gpio_free(void)
+{
+       gpio_free(DM9000_NET_INT_PIN);
+       rk2818_mux_api_mode_resume(DM9000_INT_IOMUX_NAME);
+       rk2818_mux_api_mode_resume(DM9000_CS_IOMUX_NAME);
+       return 0;
+}
+int dm9k_get_gpio_irq(void)
+{
+       return gpio_to_irq(DM9000_NET_INT_PIN);
+}
+
+static struct resource dm9k_resource[] = {
+       [0] = {
+               .start = DM9000_IO_ADDR,    
+               .end   = DM9000_IO_ADDR + 3,
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start = DM9000_DATA_ADDR,      
+               .end   = DM9000_DATA_ADDR + 3,
+               .flags = IORESOURCE_MEM,
+       },
+       [2] = {
+               .start = DM9000_NET_INT_PIN,
+               .end   = DM9000_NET_INT_PIN,
+               .flags = IORESOURCE_IRQ | DM9000_IRQ,
+       }
+
+};
+
+/* for the moment we limit ourselves to 8bit IO until some
+ * better IO routines can be written and tested
+*/
+struct dm9000_plat_data dm9k_platdata = {      
+       .flags = DM9000_PLATF_8BITONLY,
+       .io_init = dm9k_gpio_set,
+       .io_deinit = dm9k_gpio_free,
+       .get_irq_num = dm9k_get_gpio_irq,
+};
+
+struct platform_device rk2818_device_dm9k = {
+       .name           = "dm9000",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(dm9k_resource),
+       .resource       = dm9k_resource,
+       .dev            = {
+               .platform_data = &dm9k_platdata,
+       }
+};
 #endif
+
+static struct platform_device *devices[] __initdata = {
+       &rk2818_device_uart1,
 #ifdef CONFIG_I2C0_RK2818
        &rk2818_device_i2c0,
 #endif
@@ -480,6 +574,10 @@ static struct platform_device *devices[] __initdata = {
 #ifdef CONFIG_MTD_NAND_RK2818
        &rk2818_nand_device,
 #endif
+#ifdef CONFIG_DM9000
+       &rk2818_device_dm9k,
+#endif
+
 #ifdef CONFIG_DWC_OTG
        &rk2818_device_dwc_otg,
 #endif
old mode 100644 (file)
new mode 100755 (executable)
index 527c226..af814be
@@ -443,109 +443,99 @@ struct rk2818bl_info rk2818_bl_info = {
         .pw_iomux = GPIOA23_UART2_SEL_NAME,
 };
 
+/********************************************************
+*                              dm9000 net work devices
+*                              author:lyx
+********************************************************/
 #ifdef CONFIG_DM9000
-#define NET_INT_PIN RK2818_PIN_PE2
-/*dm9000 gpio set*/
+/*
+GPIOA5_FLASHCS1_SEL_NAME     IOMUXB_FLASH_CS1
+GPIOA6_FLASHCS2_SEL_NAME     IOMUXB_FLASH_CS2
+GPIOA7_FLASHCS3_SEL_NAME     IOMUXB_FLASH_CS3
+GPIOE_SPI1_FLASH_SEL1_NAME   IOMUXA_FLASH_CS45
+GPIOE_SPI1_FLASH_SEL_NAME    IOMUXA_FLASH_CS67
+*/
+#define DM9000_USE_NAND_CS 1     //cs can be 1,2,3,4,5,6 or 7
+#define DM9000_CS_IOMUX_NAME GPIOA5_FLASHCS1_SEL_NAME
+#define DM9000_CS_IOMUX_MODE IOMUXB_FLASH_CS1
+#define DM9000_NET_INT_PIN RK2818_PIN_PE2
+#define DM9000_INT_IOMUX_NAME GPIOE_SPI1_FLASH_SEL1_NAME
+#define DM9000_INT_IOMUX_MODE IOMUXA_GPIO1_A12
+#define DM9000_INT_INIT_VALUE GPIOPullDown
+#define DM9000_IRQ IRQF_TRIGGER_HIGH
+#define DM9000_IO_ADDR (RK2818_NANDC_PHYS + 0x800 + DM9000_USE_NAND_CS*0x100 + 0x8)
+#define DM9000_DATA_ADDR (RK2818_NANDC_PHYS + 0x800 + DM9000_USE_NAND_CS*0x100 + 0x4)
+
 int dm9k_gpio_set(void)
 {
        //cs
-#ifdef CONFIG_DM9000_CHIP_SELECT
-               switch (CONFIG_DM9000_CHIP_SELECT) {
-               case 1:
-                       rk2818_mux_api_set(GPIOA5_FLASHCS1_SEL_NAME, IOMUXB_FLASH_CS1);
-                       break;
-               case 2:
-                       rk2818_mux_api_set(GPIOA6_FLASHCS2_SEL_NAME, IOMUXB_FLASH_CS2);
-                       break;
-               case 3:
-                       rk2818_mux_api_set(GPIOA7_FLASHCS3_SEL_NAME, IOMUXB_FLASH_CS3);
-                       break;
-               case 4:
-               case 5:
-                       rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL1_NAME, IOMUXA_FLASH_CS45);      
-                       break;
-               case 6:
-               case 7:
-                       rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL_NAME, IOMUXA_FLASH_CS67);  
-                       break;
-               default:
-                       break;
-               }
-#endif
+       rk2818_mux_api_set(DM9000_CS_IOMUX_NAME, DM9000_CS_IOMUX_MODE);
 
        //int
-       rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL1_NAME, IOMUXA_GPIO1_A12);       
-       if (gpio_request(NET_INT_PIN, "dm9000 interrupt")) {
-               gpio_free(NET_INT_PIN);
-               rk2818_mux_api_mode_resume(GPIOA1_HOSTDATA17_SEL_NAME);
+       rk2818_mux_api_set(DM9000_INT_IOMUX_NAME, DM9000_INT_IOMUX_MODE);
+       
+       if (gpio_request(DM9000_NET_INT_PIN, "dm9000 interrupt")) {
+               gpio_free(DM9000_NET_INT_PIN);
+               rk2818_mux_api_mode_resume(DM9000_INT_IOMUX_NAME);
+               rk2818_mux_api_mode_resume(DM9000_CS_IOMUX_NAME);
                printk("[fun:%s line:%d], request gpio for net interrupt fail\n", __func__,__LINE__);
-               goto err;
+
                return -1;
        }       
-       gpio_pull_updown(NET_INT_PIN, GPIOPullDown);
-       gpio_direction_input(NET_INT_PIN);
-       return 0;
-err:
+       gpio_pull_updown(DM9000_NET_INT_PIN, DM9000_INT_INIT_VALUE);
+       gpio_direction_input(DM9000_NET_INT_PIN);
        
-#ifdef CONFIG_DM9000_CHIP_SELECT
-               switch (CONFIG_DM9000_CHIP_SELECT) {
-               case 1:
-                       rk2818_mux_api_mode_resume(GPIOA5_FLASHCS1_SEL_NAME);
-                       break;
-               case 2:
-                       rk2818_mux_api_mode_resume(GPIOA6_FLASHCS2_SEL_NAME);
-                       break;
-               case 3:
-                       rk2818_mux_api_mode_resume(GPIOA7_FLASHCS3_SEL_NAME);
-                       break;
-               case 4:
-               case 5:
-                       rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL1_NAME); 
-                       break;
-               case 6:
-               case 7:
-                       rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL_NAME);  
-                       break;
-               default:
-                       break;
-               }
-#endif
-       return -1;
+       return 0;
 }
-void dm9k_gpio_free(void)
+int dm9k_gpio_free(void)
 {
-       gpio_free(NET_INT_PIN);
-       rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL1_NAME);
-#ifdef CONFIG_DM9000_CHIP_SELECT
-               switch (CONFIG_DM9000_CHIP_SELECT) {
-               case 1:
-                       rk2818_mux_api_mode_resume(GPIOA5_FLASHCS1_SEL_NAME);
-                       break;
-               case 2:
-                       rk2818_mux_api_mode_resume(GPIOA6_FLASHCS2_SEL_NAME);
-                       break;
-               case 3:
-                       rk2818_mux_api_mode_resume(GPIOA7_FLASHCS3_SEL_NAME);
-                       break;
-               case 4:
-               case 5:
-                       rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL1_NAME); 
-                       break;
-               case 6:
-               case 7:
-                       rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL_NAME);  
-                       break;
-               default:
-                       break;
-               }
-#endif
+       gpio_free(DM9000_NET_INT_PIN);
+       rk2818_mux_api_mode_resume(DM9000_INT_IOMUX_NAME);
+       rk2818_mux_api_mode_resume(DM9000_CS_IOMUX_NAME);
+       return 0;
+}
+int dm9k_get_gpio_irq(void)
+{
+       return gpio_to_irq(DM9000_NET_INT_PIN);
 }
 
-struct dm9000_plat_data dm9k_platdata = {
+static struct resource dm9k_resource[] = {
+       [0] = {
+               .start = DM9000_IO_ADDR,    
+               .end   = DM9000_IO_ADDR + 3,
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start = DM9000_DATA_ADDR,      
+               .end   = DM9000_DATA_ADDR + 3,
+               .flags = IORESOURCE_MEM,
+       },
+       [2] = {
+               .start = DM9000_NET_INT_PIN,
+               .end   = DM9000_NET_INT_PIN,
+               .flags = IORESOURCE_IRQ | DM9000_IRQ,
+       }
+
+};
+
+/* for the moment we limit ourselves to 8bit IO until some
+ * better IO routines can be written and tested
+*/
+struct dm9000_plat_data dm9k_platdata = {      
        .flags = DM9000_PLATF_8BITONLY,
-       .pin_int = NET_INT_PIN,
-       .net_gpio_set = dm9k_gpio_set,
-       .net_gpio_free = dm9k_gpio_free,
+       .io_init = dm9k_gpio_set,
+       .io_deinit = dm9k_gpio_free,
+       .get_irq_num = dm9k_get_gpio_irq,
+};
+
+struct platform_device rk2818_device_dm9k = {
+       .name           = "dm9000",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(dm9k_resource),
+       .resource       = dm9k_resource,
+       .dev            = {
+               .platform_data = &dm9k_platdata,
+       }
 };
 #endif
 
index 01be1f09d66da19808e720498a627e4ae8b20e0d..b30f5fe7b4e639bd06e468733f35e3180af4f72f 100755 (executable)
@@ -449,108 +449,99 @@ struct rk2818bl_info rk2818_bl_info = {
         .pw_iomux = GPIOF34_UART3_SEL_NAME,
 };
 
+/********************************************************
+*                              dm9000 net work devices
+*                              author:lyx
+********************************************************/
 #ifdef CONFIG_DM9000
-#define NET_INT_PIN RK2818_PIN_PA1
-/*dm9000 gpio set*/
+/*
+GPIOA5_FLASHCS1_SEL_NAME     IOMUXB_FLASH_CS1
+GPIOA6_FLASHCS2_SEL_NAME     IOMUXB_FLASH_CS2
+GPIOA7_FLASHCS3_SEL_NAME     IOMUXB_FLASH_CS3
+GPIOE_SPI1_FLASH_SEL1_NAME   IOMUXA_FLASH_CS45
+GPIOE_SPI1_FLASH_SEL_NAME    IOMUXA_FLASH_CS67
+*/
+#define DM9000_USE_NAND_CS 1     //cs can be 1,2,3,4,5,6 or 7
+#define DM9000_CS_IOMUX_NAME GPIOA5_FLASHCS1_SEL_NAME
+#define DM9000_CS_IOMUX_MODE IOMUXB_FLASH_CS1
+#define DM9000_NET_INT_PIN RK2818_PIN_PA1
+#define DM9000_INT_IOMUX_NAME GPIOA1_HOSTDATA17_SEL_NAME
+#define DM9000_INT_IOMUX_MODE IOMUXB_GPIO0_A1
+#define DM9000_INT_INIT_VALUE GPIOPullDown
+#define DM9000_IRQ IRQF_TRIGGER_HIGH
+#define DM9000_IO_ADDR (RK2818_NANDC_PHYS + 0x800 + DM9000_USE_NAND_CS*0x100 + 0x8)
+#define DM9000_DATA_ADDR (RK2818_NANDC_PHYS + 0x800 + DM9000_USE_NAND_CS*0x100 + 0x4)
+
 int dm9k_gpio_set(void)
 {
        //cs
-#ifdef CONFIG_DM9000_CHIP_SELECT
-               switch (CONFIG_DM9000_CHIP_SELECT) {
-               case 1:
-                       rk2818_mux_api_set(GPIOA5_FLASHCS1_SEL_NAME, IOMUXB_FLASH_CS1);
-                       break;
-               case 2:
-                       rk2818_mux_api_set(GPIOA6_FLASHCS2_SEL_NAME, IOMUXB_FLASH_CS2);
-                       break;
-               case 3:
-                       rk2818_mux_api_set(GPIOA7_FLASHCS3_SEL_NAME, IOMUXB_FLASH_CS3);
-                       break;
-               case 4:
-               case 5:
-                       rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL1_NAME, IOMUXA_FLASH_CS45);      
-                       break;
-               case 6:
-               case 7:
-                       rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL_NAME, IOMUXA_FLASH_CS67);  
-                       break;
-               default:
-                       break;
-               }
-#endif
+       rk2818_mux_api_set(DM9000_CS_IOMUX_NAME, DM9000_CS_IOMUX_MODE);
 
        //int
-       rk2818_mux_api_set(GPIOA1_HOSTDATA17_SEL_NAME, IOMUXB_GPIO0_A1);
-       if (gpio_request(NET_INT_PIN, "dm9000 interrupt")) {
-               gpio_free(NET_INT_PIN);
-               rk2818_mux_api_mode_resume(GPIOA1_HOSTDATA17_SEL_NAME);         
+       rk2818_mux_api_set(DM9000_INT_IOMUX_NAME, DM9000_INT_IOMUX_MODE);
+       
+       if (gpio_request(DM9000_NET_INT_PIN, "dm9000 interrupt")) {
+               gpio_free(DM9000_NET_INT_PIN);
+               rk2818_mux_api_mode_resume(DM9000_INT_IOMUX_NAME);
+               rk2818_mux_api_mode_resume(DM9000_CS_IOMUX_NAME);
                printk("[fun:%s line:%d], request gpio for net interrupt fail\n", __func__,__LINE__);
-               goto err;
+
+               return -1;
        }       
-       gpio_pull_updown(NET_INT_PIN, GPIOPullDown);
-       gpio_direction_input(NET_INT_PIN);
+       gpio_pull_updown(DM9000_NET_INT_PIN, DM9000_INT_INIT_VALUE);
+       gpio_direction_input(DM9000_NET_INT_PIN);
+       
        return 0;
-
-err:           
-#ifdef CONFIG_DM9000_CHIP_SELECT
-       switch (CONFIG_DM9000_CHIP_SELECT) {
-       case 1:
-               rk2818_mux_api_mode_resume(GPIOA5_FLASHCS1_SEL_NAME);
-               break;
-       case 2:
-               rk2818_mux_api_mode_resume(GPIOA6_FLASHCS2_SEL_NAME);
-               break;
-       case 3:
-               rk2818_mux_api_mode_resume(GPIOA7_FLASHCS3_SEL_NAME);
-               break;
-       case 4:
-       case 5:
-               rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL1_NAME); 
-               break;
-       case 6:
-       case 7:
-               rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL_NAME);  
-               break;
-       default:
-               break;
-       }
-#endif
-       return -1;
 }
-void dm9k_gpio_free(void)
+int dm9k_gpio_free(void)
 {
-       gpio_free(NET_INT_PIN);
-       rk2818_mux_api_mode_resume(GPIOA1_HOSTDATA17_SEL_NAME);
-#ifdef CONFIG_DM9000_CHIP_SELECT
-               switch (CONFIG_DM9000_CHIP_SELECT) {
-               case 1:
-                       rk2818_mux_api_mode_resume(GPIOA5_FLASHCS1_SEL_NAME);
-                       break;
-               case 2:
-                       rk2818_mux_api_mode_resume(GPIOA6_FLASHCS2_SEL_NAME);
-                       break;
-               case 3:
-                       rk2818_mux_api_mode_resume(GPIOA7_FLASHCS3_SEL_NAME);
-                       break;
-               case 4:
-               case 5:
-                       rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL1_NAME); 
-                       break;
-               case 6:
-               case 7:
-                       rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL_NAME);  
-                       break;
-               default:
-                       break;
-               }
-#endif 
+       gpio_free(DM9000_NET_INT_PIN);
+       rk2818_mux_api_mode_resume(DM9000_INT_IOMUX_NAME);
+       rk2818_mux_api_mode_resume(DM9000_CS_IOMUX_NAME);
+       return 0;
 }
+int dm9k_get_gpio_irq(void)
+{
+       return gpio_to_irq(DM9000_NET_INT_PIN);
+}
+
+static struct resource dm9k_resource[] = {
+       [0] = {
+               .start = DM9000_IO_ADDR,    
+               .end   = DM9000_IO_ADDR + 3,
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start = DM9000_DATA_ADDR,      
+               .end   = DM9000_DATA_ADDR + 3,
+               .flags = IORESOURCE_MEM,
+       },
+       [2] = {
+               .start = DM9000_NET_INT_PIN,
+               .end   = DM9000_NET_INT_PIN,
+               .flags = IORESOURCE_IRQ | DM9000_IRQ,
+       }
 
+};
+
+/* for the moment we limit ourselves to 8bit IO until some
+ * better IO routines can be written and tested
+*/
 struct dm9000_plat_data dm9k_platdata = {      
        .flags = DM9000_PLATF_8BITONLY,
-       .pin_int = NET_INT_PIN,
-       .net_gpio_set = dm9k_gpio_set,
-       .net_gpio_free = dm9k_gpio_free,
+       .io_init = dm9k_gpio_set,
+       .io_deinit = dm9k_gpio_free,
+       .get_irq_num = dm9k_get_gpio_irq,
+};
+
+struct platform_device rk2818_device_dm9k = {
+       .name           = "dm9000",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(dm9k_resource),
+       .resource       = dm9k_resource,
+       .dev            = {
+               .platform_data = &dm9k_platdata,
+       }
 };
 #endif
 
index d1aa810bb6cd95987f523ceaa93312368ee8a441..e52be0a72bdd48b4fd794a9ed69eb1a746bb686b 100755 (executable)
@@ -616,108 +616,99 @@ struct rk2818bl_info rk2818_bl_info = {
         .pw_iomux = GPIOF34_UART3_SEL_NAME,
 };
 
+/********************************************************
+*                              dm9000 net work devices
+*                              author:lyx
+********************************************************/
 #ifdef CONFIG_DM9000
-#define NET_INT_PIN RK2818_PIN_PA1
-/*dm9000 gpio set*/
+/*
+GPIOA5_FLASHCS1_SEL_NAME     IOMUXB_FLASH_CS1
+GPIOA6_FLASHCS2_SEL_NAME     IOMUXB_FLASH_CS2
+GPIOA7_FLASHCS3_SEL_NAME     IOMUXB_FLASH_CS3
+GPIOE_SPI1_FLASH_SEL1_NAME   IOMUXA_FLASH_CS45
+GPIOE_SPI1_FLASH_SEL_NAME    IOMUXA_FLASH_CS67
+*/
+#define DM9000_USE_NAND_CS 1     //cs can be 1,2,3,4,5,6 or 7
+#define DM9000_CS_IOMUX_NAME GPIOA5_FLASHCS1_SEL_NAME
+#define DM9000_CS_IOMUX_MODE IOMUXB_FLASH_CS1
+#define DM9000_NET_INT_PIN RK2818_PIN_PA1
+#define DM9000_INT_IOMUX_NAME GPIOA1_HOSTDATA17_SEL_NAME
+#define DM9000_INT_IOMUX_MODE IOMUXB_GPIO0_A1
+#define DM9000_INT_INIT_VALUE GPIOPullDown
+#define DM9000_IRQ IRQF_TRIGGER_HIGH
+#define DM9000_IO_ADDR (RK2818_NANDC_PHYS + 0x800 + DM9000_USE_NAND_CS*0x100 + 0x8)
+#define DM9000_DATA_ADDR (RK2818_NANDC_PHYS + 0x800 + DM9000_USE_NAND_CS*0x100 + 0x4)
+
 int dm9k_gpio_set(void)
 {
        //cs
-#ifdef CONFIG_DM9000_CHIP_SELECT
-       switch (CONFIG_DM9000_CHIP_SELECT) {
-       case 1:
-               rk2818_mux_api_set(GPIOA5_FLASHCS1_SEL_NAME, IOMUXB_FLASH_CS1);
-               break;
-       case 2:
-               rk2818_mux_api_set(GPIOA6_FLASHCS2_SEL_NAME, IOMUXB_FLASH_CS2);
-               break;
-       case 3:
-               rk2818_mux_api_set(GPIOA7_FLASHCS3_SEL_NAME, IOMUXB_FLASH_CS3);
-               break;
-       case 4:
-       case 5:
-               rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL1_NAME, IOMUXA_FLASH_CS45);      
-               break;
-       case 6:
-       case 7:
-               rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL_NAME, IOMUXA_FLASH_CS67);  
-               break;
-       default:
-               break;
-       }
-#endif
+       rk2818_mux_api_set(DM9000_CS_IOMUX_NAME, DM9000_CS_IOMUX_MODE);
 
        //int
-       rk2818_mux_api_set(GPIOA1_HOSTDATA17_SEL_NAME, IOMUXB_GPIO0_A1);
-       if (gpio_request(NET_INT_PIN, "dm9000 interrupt")) {
-               gpio_free(NET_INT_PIN);         
-               rk2818_mux_api_mode_resume(GPIOA1_HOSTDATA17_SEL_NAME);
+       rk2818_mux_api_set(DM9000_INT_IOMUX_NAME, DM9000_INT_IOMUX_MODE);
+       
+       if (gpio_request(DM9000_NET_INT_PIN, "dm9000 interrupt")) {
+               gpio_free(DM9000_NET_INT_PIN);
+               rk2818_mux_api_mode_resume(DM9000_INT_IOMUX_NAME);
+               rk2818_mux_api_mode_resume(DM9000_CS_IOMUX_NAME);
                printk("[fun:%s line:%d], request gpio for net interrupt fail\n", __func__,__LINE__);
-               goto err;
+
+               return -1;
        }       
-       gpio_pull_updown(NET_INT_PIN, GPIOPullDown);
-       gpio_direction_input(NET_INT_PIN);
-       return 0;
-err:
+       gpio_pull_updown(DM9000_NET_INT_PIN, DM9000_INT_INIT_VALUE);
+       gpio_direction_input(DM9000_NET_INT_PIN);
        
-#ifdef CONFIG_DM9000_CHIP_SELECT
-       switch (CONFIG_DM9000_CHIP_SELECT) {
-       case 1:
-               rk2818_mux_api_mode_resume(GPIOA5_FLASHCS1_SEL_NAME);
-               break;
-       case 2:
-               rk2818_mux_api_mode_resume(GPIOA6_FLASHCS2_SEL_NAME);
-               break;
-       case 3:
-               rk2818_mux_api_mode_resume(GPIOA7_FLASHCS3_SEL_NAME);
-               break;
-       case 4:
-       case 5:
-               rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL1_NAME); 
-               break;
-       case 6:
-       case 7:
-               rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL_NAME);  
-               break;
-       default:
-               break;
-       }
-#endif
-       return -1;
+       return 0;
 }
-void dm9k_gpio_free(void)
+int dm9k_gpio_free(void)
 {
-       gpio_free(NET_INT_PIN);
-       rk2818_mux_api_mode_resume(GPIOA1_HOSTDATA17_SEL_NAME);
-#ifdef CONFIG_DM9000_CHIP_SELECT
-       switch (CONFIG_DM9000_CHIP_SELECT) {
-       case 1:
-               rk2818_mux_api_mode_resume(GPIOA5_FLASHCS1_SEL_NAME);
-               break;
-       case 2:
-               rk2818_mux_api_mode_resume(GPIOA6_FLASHCS2_SEL_NAME);
-               break;
-       case 3:
-               rk2818_mux_api_mode_resume(GPIOA7_FLASHCS3_SEL_NAME);
-               break;
-       case 4:
-       case 5:
-               rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL1_NAME); 
-               break;
-       case 6:
-       case 7:
-               rk2818_mux_api_mode_resume(GPIOE_SPI1_FLASH_SEL_NAME);  
-               break;
-       default:
-               break;
-       }
-#endif
+       gpio_free(DM9000_NET_INT_PIN);
+       rk2818_mux_api_mode_resume(DM9000_INT_IOMUX_NAME);
+       rk2818_mux_api_mode_resume(DM9000_CS_IOMUX_NAME);
+       return 0;
 }
+int dm9k_get_gpio_irq(void)
+{
+       return gpio_to_irq(DM9000_NET_INT_PIN);
+}
+
+static struct resource dm9k_resource[] = {
+       [0] = {
+               .start = DM9000_IO_ADDR,    
+               .end   = DM9000_IO_ADDR + 3,
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start = DM9000_DATA_ADDR,      
+               .end   = DM9000_DATA_ADDR + 3,
+               .flags = IORESOURCE_MEM,
+       },
+       [2] = {
+               .start = DM9000_NET_INT_PIN,
+               .end   = DM9000_NET_INT_PIN,
+               .flags = IORESOURCE_IRQ | DM9000_IRQ,
+       }
 
+};
+
+/* for the moment we limit ourselves to 8bit IO until some
+ * better IO routines can be written and tested
+*/
 struct dm9000_plat_data dm9k_platdata = {      
        .flags = DM9000_PLATF_8BITONLY,
-       .pin_int = NET_INT_PIN,
-       .net_gpio_set = dm9k_gpio_set,
-       .net_gpio_free = dm9k_gpio_free,
+       .io_init = dm9k_gpio_set,
+       .io_deinit = dm9k_gpio_free,
+       .get_irq_num = dm9k_get_gpio_irq,
+};
+
+struct platform_device rk2818_device_dm9k = {
+       .name           = "dm9000",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(dm9k_resource),
+       .resource       = dm9k_resource,
+       .dev            = {
+               .platform_data = &dm9k_platdata,
+       }
 };
 #endif
 
index c0885e341e0f0cec535de55e0904dc16c2f9ab49..b97febc98d99644a324caeca230c182110869cac 100755 (executable)
@@ -27,7 +27,6 @@
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
 
-#include <linux/dm9000.h>
 #include <mach/gpio.h>
 #include <mach/rk2818_nand.h>
 #include <mach/iomux.h>
@@ -322,47 +321,6 @@ struct platform_device rk2818_soc_camera_pdrv = {
 };
 #endif 
 
-//net device
-/* DM9000 */
-#ifdef CONFIG_DM9000
-#ifdef CONFIG_DM9000_CHIP_SELECT
-#define DM9000_CS CONFIG_DM9000_CHIP_SELECT
-#else
-#define DM9000_CS 1
-#endif
-static struct resource dm9k_resource[] = {
-       [0] = {
-               .start = RK2818_NANDC_PHYS + 0x800 + (DM9000_CS*0x100 + 0x8),    //nand_cs1+nand_cmd
-               .end   = RK2818_NANDC_PHYS + 0x800 + (DM9000_CS*0x100 + 0x8) + 3,
-               .flags = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start = RK2818_NANDC_PHYS + 0x800 + (DM9000_CS*0x100 + 0x4),   //nand_cs1+nand_data
-               .end   = RK2818_NANDC_PHYS + 0x800 + (DM9000_CS*0x100 + 0x4) + 3,
-               .flags = IORESOURCE_MEM,
-       },
-       [2] = {
-               .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
-       }
-};
-
-/* for the moment we limit ourselves to 8bit IO until some
- * better IO routines can be written and tested
-*/
-
-//dm9k_platdata.flags = DM9000_PLATF_8BITONLY;
-
-struct platform_device rk2818_device_dm9k = {
-       .name           = "dm9000",
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(dm9k_resource),
-       .resource       = dm9k_resource,
-       .dev            = {
-               .platform_data = &dm9k_platdata,
-       }
-};
-#endif
-
 /*ADC*/
 static struct resource rk2818_adc_resource[] = {
        {
index 45a78afc5f0c10c87d3456d133842fdf280d8490..52444d86bae1662d77a9ab51648a400538a907fd 100755 (executable)
@@ -37,8 +37,6 @@ extern struct platform_device rk2818_device_sdmmc0;
 extern struct platform_device rk2818_device_sdmmc1;
 extern struct rk2818_sdmmc_platform_data default_sdmmc0_data;
 extern struct rk2818_sdmmc_platform_data default_sdmmc1_data;
-extern struct platform_device rk2818_device_dm9k;
-extern struct dm9000_plat_data dm9k_platdata;
 extern struct platform_device rk2818_device_i2s;
 extern struct platform_device rk2818_device_pmem;
 extern struct platform_device rk2818_device_pmem_dsp;
old mode 100644 (file)
new mode 100755 (executable)
index 2ccf896..41a3405
@@ -957,14 +957,6 @@ choice
                tristate  "DM9000 with NOR Interface"
 endchoice
 endif
-
-config DM9000_CHIP_SELECT
-       int "the number of nandc chip select for DM9000"
-       depends on DM9000_USE_NAND_CONTROL
-       default 1
-       help
-         select the cs for dm9000
-
          
 config DM9000_FORCE_SIMPLE_PHY_POLL
        bool "Force simple NSR based PHY polling"
index 5247ac01581bdda705f3e146177d4915f38cb020..cb0e7017c160355f49db19c15cdaf39ef794d9af 100755 (executable)
@@ -1228,13 +1228,8 @@ dm9000_open(struct net_device *dev)
 
        irqflags |= IRQF_SHARED;
 
-       #ifndef CONFIG_MACH_RK2818MID
-       if (request_irq(dev->irq, dm9000_interrupt, IRQF_TRIGGER_HIGH, dev->name, dev))
-               return -EAGAIN;
-       #else
        if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
                return -EAGAIN;
-       #endif
 
        /* Initialize DM9000 board */
        dm9000_reset(db);
@@ -1515,34 +1510,20 @@ dm9000_probe(struct platform_device *pdev)
        /* fill in parameters for net-dev structure */
        ndev->base_addr = (unsigned long)db->io_addr;
 
-#if 0
-       rk2818_mux_api_set(GPIOA5_FLASHCS1_SEL_NAME, IOMUXB_FLASH_CS1);
-
-       #ifdef CONFIG_MACH_RK2818MID
-       rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL1_NAME, IOMUXA_GPIO1_A12);       
-       ndev->irq = gpio_to_irq(db->irq_res->start);
-       #else
-       rk2818_mux_api_set(GPIOA1_HOSTDATA17_SEL_NAME, IOMUXB_GPIO0_A1);
-       if (gpio_request(db->irq_res->start, "dm9000 interrupt")) {
-               gpio_free(db->irq_res->start);
-               dev_err(db->dev, "failed to request gpio\n");
-               ret = -EINVAL;
-               goto out;
-       }       
-       gpio_pull_updown(db->irq_res->start, GPIOPullDown);
-       ndev->irq = gpio_to_irq(db->irq_res->start);
-       #endif
-#endif 
-
-       if (pdata->net_gpio_set) {
-               if (pdata->net_gpio_set()) {
+       //io init for dm9000 , modify by lyx@20100809
+       if (pdata && pdata->io_init) {
+               if (pdata->io_init()) {
                        ret = -EINVAL;
                        goto out;
                }
        }
-
-       ndev->irq = gpio_to_irq(pdata->pin_int);
-
+       if (pdata && pdata->get_irq_num) {
+               ndev->irq = pdata->get_irq_num();
+       }
+       else {
+               ndev->irq = db->irq_res->start;
+       }
+       
        /* ensure at least we have a default set of IO routines */
        dm9000_set_io(db, iosize);
 
@@ -1735,6 +1716,11 @@ static int __devexit
 dm9000_drv_remove(struct platform_device *pdev)
 {
        struct net_device *ndev = platform_get_drvdata(pdev);
+       struct dm9000_plat_data *pdata = pdev->dev.platform_data;
+
+       //deinit io for dm9000
+       if (pdata && pdata->io_deinit)
+               pdata->io_deinit();
 
        platform_set_drvdata(pdev, NULL);
 
old mode 100644 (file)
new mode 100755 (executable)
index 15ace65..8b621fa
@@ -29,11 +29,10 @@ struct dm9000_plat_data {
        unsigned int    flags;
        unsigned char   dev_addr[6];
 
-       unsigned int pin_int;
        //gpio init&deinit      
-    int (*net_gpio_set)(void);
-    void (*net_gpio_free)(void);
-       
+    int (*io_init)(void);
+    int (*io_deinit)(void);
+       int (*get_irq_num)(void);
 
        /* allow replacement IO routines */