diff options
-rw-r--r-- | arch/arm/mach-davinci/devices-da8xx.c | 104 | ||||
-rw-r--r-- | arch/arm/mach-davinci/include/mach/da8xx.h | 4 |
2 files changed, 108 insertions, 0 deletions
diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c index 9b1ecfb3905..ec7e84b2114 100644 --- a/arch/arm/mach-davinci/devices-da8xx.c +++ b/arch/arm/mach-davinci/devices-da8xx.c | |||
@@ -38,14 +38,20 @@ | |||
38 | #define DA8XX_EMAC_MDIO_BASE 0x01e24000 | 38 | #define DA8XX_EMAC_MDIO_BASE 0x01e24000 |
39 | #define DA8XX_GPIO_BASE 0x01e26000 | 39 | #define DA8XX_GPIO_BASE 0x01e26000 |
40 | #define DA8XX_I2C1_BASE 0x01e28000 | 40 | #define DA8XX_I2C1_BASE 0x01e28000 |
41 | #define DA8XX_SPI0_BASE 0x01c41000 | ||
42 | #define DA8XX_SPI1_BASE 0x01f0e000 | ||
41 | 43 | ||
42 | #define DA8XX_EMAC_CTRL_REG_OFFSET 0x3000 | 44 | #define DA8XX_EMAC_CTRL_REG_OFFSET 0x3000 |
43 | #define DA8XX_EMAC_MOD_REG_OFFSET 0x2000 | 45 | #define DA8XX_EMAC_MOD_REG_OFFSET 0x2000 |
44 | #define DA8XX_EMAC_RAM_OFFSET 0x0000 | 46 | #define DA8XX_EMAC_RAM_OFFSET 0x0000 |
45 | #define DA8XX_EMAC_CTRL_RAM_SIZE SZ_8K | 47 | #define DA8XX_EMAC_CTRL_RAM_SIZE SZ_8K |
46 | 48 | ||
49 | #define DA8XX_DMA_SPI0_RX EDMA_CTLR_CHAN(0, 14) | ||
50 | #define DA8XX_DMA_SPI0_TX EDMA_CTLR_CHAN(0, 15) | ||
47 | #define DA8XX_DMA_MMCSD0_RX EDMA_CTLR_CHAN(0, 16) | 51 | #define DA8XX_DMA_MMCSD0_RX EDMA_CTLR_CHAN(0, 16) |
48 | #define DA8XX_DMA_MMCSD0_TX EDMA_CTLR_CHAN(0, 17) | 52 | #define DA8XX_DMA_MMCSD0_TX EDMA_CTLR_CHAN(0, 17) |
53 | #define DA8XX_DMA_SPI1_RX EDMA_CTLR_CHAN(0, 18) | ||
54 | #define DA8XX_DMA_SPI1_TX EDMA_CTLR_CHAN(0, 19) | ||
49 | #define DA850_DMA_MMCSD1_RX EDMA_CTLR_CHAN(1, 28) | 55 | #define DA850_DMA_MMCSD1_RX EDMA_CTLR_CHAN(1, 28) |
50 | #define DA850_DMA_MMCSD1_TX EDMA_CTLR_CHAN(1, 29) | 56 | #define DA850_DMA_MMCSD1_TX EDMA_CTLR_CHAN(1, 29) |
51 | 57 | ||
@@ -723,3 +729,101 @@ int __init da8xx_register_cpuidle(void) | |||
723 | 729 | ||
724 | return platform_device_register(&da8xx_cpuidle_device); | 730 | return platform_device_register(&da8xx_cpuidle_device); |
725 | } | 731 | } |
732 | |||
733 | static struct resource da8xx_spi0_resources[] = { | ||
734 | [0] = { | ||
735 | .start = DA8XX_SPI0_BASE, | ||
736 | .end = DA8XX_SPI0_BASE + SZ_4K - 1, | ||
737 | .flags = IORESOURCE_MEM, | ||
738 | }, | ||
739 | [1] = { | ||
740 | .start = IRQ_DA8XX_SPINT0, | ||
741 | .end = IRQ_DA8XX_SPINT0, | ||
742 | .flags = IORESOURCE_IRQ, | ||
743 | }, | ||
744 | [2] = { | ||
745 | .start = DA8XX_DMA_SPI0_RX, | ||
746 | .end = DA8XX_DMA_SPI0_RX, | ||
747 | .flags = IORESOURCE_DMA, | ||
748 | }, | ||
749 | [3] = { | ||
750 | .start = DA8XX_DMA_SPI0_TX, | ||
751 | .end = DA8XX_DMA_SPI0_TX, | ||
752 | .flags = IORESOURCE_DMA, | ||
753 | }, | ||
754 | }; | ||
755 | |||
756 | static struct resource da8xx_spi1_resources[] = { | ||
757 | [0] = { | ||
758 | .start = DA8XX_SPI1_BASE, | ||
759 | .end = DA8XX_SPI1_BASE + SZ_4K - 1, | ||
760 | .flags = IORESOURCE_MEM, | ||
761 | }, | ||
762 | [1] = { | ||
763 | .start = IRQ_DA8XX_SPINT1, | ||
764 | .end = IRQ_DA8XX_SPINT1, | ||
765 | .flags = IORESOURCE_IRQ, | ||
766 | }, | ||
767 | [2] = { | ||
768 | .start = DA8XX_DMA_SPI1_RX, | ||
769 | .end = DA8XX_DMA_SPI1_RX, | ||
770 | .flags = IORESOURCE_DMA, | ||
771 | }, | ||
772 | [3] = { | ||
773 | .start = DA8XX_DMA_SPI1_TX, | ||
774 | .end = DA8XX_DMA_SPI1_TX, | ||
775 | .flags = IORESOURCE_DMA, | ||
776 | }, | ||
777 | }; | ||
778 | |||
779 | struct davinci_spi_platform_data da8xx_spi_pdata[] = { | ||
780 | [0] = { | ||
781 | .version = SPI_VERSION_2, | ||
782 | .intr_line = 1, | ||
783 | .dma_event_q = EVENTQ_0, | ||
784 | }, | ||
785 | [1] = { | ||
786 | .version = SPI_VERSION_2, | ||
787 | .intr_line = 1, | ||
788 | .dma_event_q = EVENTQ_0, | ||
789 | }, | ||
790 | }; | ||
791 | |||
792 | static struct platform_device da8xx_spi_device[] = { | ||
793 | [0] = { | ||
794 | .name = "spi_davinci", | ||
795 | .id = 0, | ||
796 | .num_resources = ARRAY_SIZE(da8xx_spi0_resources), | ||
797 | .resource = da8xx_spi0_resources, | ||
798 | .dev = { | ||
799 | .platform_data = &da8xx_spi_pdata[0], | ||
800 | }, | ||
801 | }, | ||
802 | [1] = { | ||
803 | .name = "spi_davinci", | ||
804 | .id = 1, | ||
805 | .num_resources = ARRAY_SIZE(da8xx_spi1_resources), | ||
806 | .resource = da8xx_spi1_resources, | ||
807 | .dev = { | ||
808 | .platform_data = &da8xx_spi_pdata[1], | ||
809 | }, | ||
810 | }, | ||
811 | }; | ||
812 | |||
813 | int __init da8xx_register_spi(int instance, struct spi_board_info *info, | ||
814 | unsigned len) | ||
815 | { | ||
816 | int ret; | ||
817 | |||
818 | if (instance < 0 || instance > 1) | ||
819 | return -EINVAL; | ||
820 | |||
821 | ret = spi_register_board_info(info, len); | ||
822 | if (ret) | ||
823 | pr_warning("%s: failed to register board info for spi %d :" | ||
824 | " %d\n", __func__, instance, ret); | ||
825 | |||
826 | da8xx_spi_pdata[instance].num_chipselect = len; | ||
827 | |||
828 | return platform_device_register(&da8xx_spi_device[instance]); | ||
829 | } | ||
diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h index cfcb2232e6b..e4fc1af8500 100644 --- a/arch/arm/mach-davinci/include/mach/da8xx.h +++ b/arch/arm/mach-davinci/include/mach/da8xx.h | |||
@@ -15,6 +15,7 @@ | |||
15 | 15 | ||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/davinci_emac.h> | 17 | #include <linux/davinci_emac.h> |
18 | #include <linux/spi/spi.h> | ||
18 | 19 | ||
19 | #include <mach/serial.h> | 20 | #include <mach/serial.h> |
20 | #include <mach/edma.h> | 21 | #include <mach/edma.h> |
@@ -23,6 +24,7 @@ | |||
23 | #include <mach/mmc.h> | 24 | #include <mach/mmc.h> |
24 | #include <mach/usb.h> | 25 | #include <mach/usb.h> |
25 | #include <mach/pm.h> | 26 | #include <mach/pm.h> |
27 | #include <mach/spi.h> | ||
26 | 28 | ||
27 | extern void __iomem *da8xx_syscfg0_base; | 29 | extern void __iomem *da8xx_syscfg0_base; |
28 | extern void __iomem *da8xx_syscfg1_base; | 30 | extern void __iomem *da8xx_syscfg1_base; |
@@ -77,6 +79,7 @@ void __init da850_init(void); | |||
77 | int da830_register_edma(struct edma_rsv_info *rsv); | 79 | int da830_register_edma(struct edma_rsv_info *rsv); |
78 | int da850_register_edma(struct edma_rsv_info *rsv[2]); | 80 | int da850_register_edma(struct edma_rsv_info *rsv[2]); |
79 | int da8xx_register_i2c(int instance, struct davinci_i2c_platform_data *pdata); | 81 | int da8xx_register_i2c(int instance, struct davinci_i2c_platform_data *pdata); |
82 | int da8xx_register_spi(int instance, struct spi_board_info *info, unsigned len); | ||
80 | int da8xx_register_watchdog(void); | 83 | int da8xx_register_watchdog(void); |
81 | int da8xx_register_usb20(unsigned mA, unsigned potpgt); | 84 | int da8xx_register_usb20(unsigned mA, unsigned potpgt); |
82 | int da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata); | 85 | int da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata); |
@@ -95,6 +98,7 @@ extern struct platform_device da8xx_serial_device; | |||
95 | extern struct emac_platform_data da8xx_emac_pdata; | 98 | extern struct emac_platform_data da8xx_emac_pdata; |
96 | extern struct da8xx_lcdc_platform_data sharp_lcd035q3dg01_pdata; | 99 | extern struct da8xx_lcdc_platform_data sharp_lcd035q3dg01_pdata; |
97 | extern struct da8xx_lcdc_platform_data sharp_lk043t1dg01_pdata; | 100 | extern struct da8xx_lcdc_platform_data sharp_lk043t1dg01_pdata; |
101 | extern struct davinci_spi_platform_data da8xx_spi_pdata[]; | ||
98 | 102 | ||
99 | extern struct platform_device da8xx_wdt_device; | 103 | extern struct platform_device da8xx_wdt_device; |
100 | 104 | ||