📄 devices.c
字号:
#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/platform_device.h>#include <linux/dma-mapping.h>#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27)#include <asm/arch/gpio.h>#include <asm/arch/udc.h>#include <asm/arch/pxafb.h>#include <asm/arch/mmc.h>#include <asm/arch/irda.h>#include <asm/arch/i2c.h>#include <asm/arch/mfp-pxa27x.h>#include <asm/arch/ohci.h>#include <asm/arch/pxa27x_keypad.h>#include <asm/arch/pxa2xx_spi.h>#include <asm/arch/camera.h>#include <asm/arch/audio.h>#include <asm/arch/pxa3xx_nand.h>#else#include <mach/gpio.h>#include <mach/udc.h>#include <mach/pxafb.h>#include <mach/mmc.h>#include <mach/irda.h>#include <mach/i2c.h>#include <mach/mfp-pxa27x.h>#include <mach/ohci.h>#include <mach/pxa27x_keypad.h>#include <mach/pxa2xx_spi.h>#include <mach/camera.h>#include <mach/audio.h>#include <mach/pxa3xx_nand.h>#endif#include "devices.h"#include "generic.h"void __init pxa_register_device(struct platform_device *dev, void *data){ int ret; dev->dev.platform_data = data; ret = platform_device_register(dev); if (ret) dev_err(&dev->dev, "unable to register device: %d\n", ret);}static struct resource pxamci_resources[] = { [0] = { .start = 0x41100000, .end = 0x41100fff, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ_MMC, .end = IRQ_MMC, .flags = IORESOURCE_IRQ, }, [2] = { .start = 21, .end = 21, .flags = IORESOURCE_DMA, }, [3] = { .start = 22, .end = 22, .flags = IORESOURCE_DMA, },};static u64 pxamci_dmamask = 0xffffffffUL;struct platform_device pxa_device_mci = { .name = "pxa2xx-mci", .id = 0, .dev = { .dma_mask = &pxamci_dmamask, .coherent_dma_mask = 0xffffffff, }, .num_resources = ARRAY_SIZE(pxamci_resources), .resource = pxamci_resources,};void __init pxa_set_mci_info(struct pxamci_platform_data *info){ pxa_register_device(&pxa_device_mci, info);}static struct pxa2xx_udc_mach_info pxa_udc_info;void __init pxa_set_udc_info(struct pxa2xx_udc_mach_info *info){ memcpy(&pxa_udc_info, info, sizeof *info);}static struct resource pxa2xx_udc_resources[] = { [0] = { .start = 0x40600000, .end = 0x4060ffff, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ_USB, .end = IRQ_USB, .flags = IORESOURCE_IRQ, },};static u64 udc_dma_mask = ~(u32)0;struct platform_device pxa25x_device_udc = { .name = "pxa25x-udc", .id = -1, .resource = pxa2xx_udc_resources, .num_resources = ARRAY_SIZE(pxa2xx_udc_resources), .dev = { .platform_data = &pxa_udc_info, .dma_mask = &udc_dma_mask, }};struct platform_device pxa27x_device_udc = { .name = "pxa27x-udc", .id = -1, .resource = pxa2xx_udc_resources, .num_resources = ARRAY_SIZE(pxa2xx_udc_resources), .dev = { .platform_data = &pxa_udc_info, .dma_mask = &udc_dma_mask, }};static struct resource pxafb_resources[] = { [0] = { .start = 0x44000000, .end = 0x4400ffff, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ_LCD, .end = IRQ_LCD, .flags = IORESOURCE_IRQ, },};static u64 fb_dma_mask = ~(u64)0;struct platform_device pxa_device_fb = { .name = "pxa2xx-fb", .id = -1, .dev = { .dma_mask = &fb_dma_mask, .coherent_dma_mask = 0xffffffff, }, .num_resources = ARRAY_SIZE(pxafb_resources), .resource = pxafb_resources,};void __init set_pxa_fb_info(struct pxafb_mach_info *info){ pxa_register_device(&pxa_device_fb, info);}void __init set_pxa_fb_parent(struct device *parent_dev){ pxa_device_fb.dev.parent = parent_dev;}static struct resource pxa_resource_ffuart[] = { { .start = __PREG(FFUART), .end = __PREG(FFUART) + 35, .flags = IORESOURCE_MEM, }, { .start = IRQ_FFUART, .end = IRQ_FFUART, .flags = IORESOURCE_IRQ, }};struct platform_device pxa_device_ffuart= { .name = "pxa2xx-uart", .id = 0, .resource = pxa_resource_ffuart, .num_resources = ARRAY_SIZE(pxa_resource_ffuart),};static struct resource pxa_resource_btuart[] = { { .start = __PREG(BTUART), .end = __PREG(BTUART) + 35, .flags = IORESOURCE_MEM, }, { .start = IRQ_BTUART, .end = IRQ_BTUART, .flags = IORESOURCE_IRQ, }};struct platform_device pxa_device_btuart = { .name = "pxa2xx-uart", .id = 1, .resource = pxa_resource_btuart, .num_resources = ARRAY_SIZE(pxa_resource_btuart),};static struct resource pxa_resource_stuart[] = { { .start = __PREG(STUART), .end = __PREG(STUART) + 35, .flags = IORESOURCE_MEM, }, { .start = IRQ_STUART, .end = IRQ_STUART, .flags = IORESOURCE_IRQ, }};struct platform_device pxa_device_stuart = { .name = "pxa2xx-uart", .id = 2, .resource = pxa_resource_stuart, .num_resources = ARRAY_SIZE(pxa_resource_stuart),};static struct resource pxa_resource_hwuart[] = { { .start = __PREG(HWUART), .end = __PREG(HWUART) + 47, .flags = IORESOURCE_MEM, }, { .start = IRQ_HWUART, .end = IRQ_HWUART, .flags = IORESOURCE_IRQ, }};struct platform_device pxa_device_hwuart = { .name = "pxa2xx-uart", .id = 3, .resource = pxa_resource_hwuart, .num_resources = ARRAY_SIZE(pxa_resource_hwuart),};static struct resource pxai2c_resources[] = { { .start = 0x40301680, .end = 0x403016a3, .flags = IORESOURCE_MEM, }, { .start = IRQ_I2C, .end = IRQ_I2C, .flags = IORESOURCE_IRQ, },};struct platform_device pxa_device_i2c = { .name = "pxa2xx-i2c", .id = 0, .resource = pxai2c_resources, .num_resources = ARRAY_SIZE(pxai2c_resources),};static unsigned long pxa27x_i2c_mfp_cfg[] = { GPIO117_I2C_SCL, GPIO118_I2C_SDA,};void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info){ if (cpu_is_pxa27x()) pxa2xx_mfp_config(ARRAY_AND_SIZE(pxa27x_i2c_mfp_cfg)); pxa_register_device(&pxa_device_i2c, info);}static struct resource pxai2s_resources[] = { { .start = 0x40400000, .end = 0x40400083, .flags = IORESOURCE_MEM, }, { .start = IRQ_I2S, .end = IRQ_I2S, .flags = IORESOURCE_IRQ, },};struct platform_device pxa_device_i2s = { .name = "pxa2xx-i2s", .id = -1, .resource = pxai2s_resources, .num_resources = ARRAY_SIZE(pxai2s_resources),};static u64 pxaficp_dmamask = ~(u32)0;struct platform_device pxa_device_ficp = { .name = "pxa2xx-ir", .id = -1, .dev = { .dma_mask = &pxaficp_dmamask, .coherent_dma_mask = 0xffffffff, },};void __init pxa_set_ficp_info(struct pxaficp_platform_data *info){ pxa_register_device(&pxa_device_ficp, info);}struct platform_device pxa_device_rtc = { .name = "sa1100-rtc", .id = -1,};static struct resource pxa_ac97_resources[] = { [0] = { .start = 0x40500000, .end = 0x40500000 + 0xfff, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ_AC97, .end = IRQ_AC97, .flags = IORESOURCE_IRQ, },};static u64 pxa_ac97_dmamask = 0xffffffffUL;struct platform_device pxa_device_ac97 = { .name = "pxa2xx-ac97", .id = -1, .dev = { .dma_mask = &pxa_ac97_dmamask, .coherent_dma_mask = 0xffffffff, }, .num_resources = ARRAY_SIZE(pxa_ac97_resources), .resource = pxa_ac97_resources,};void __init pxa_set_ac97_info(pxa2xx_audio_ops_t *ops){ pxa_register_device(&pxa_device_ac97, ops);}#ifdef CONFIG_PXA25xstatic struct resource pxa25x_resource_pwm0[] = { [0] = { .start = 0x40b00000, .end = 0x40b0000f, .flags = IORESOURCE_MEM, },};struct platform_device pxa25x_device_pwm0 = { .name = "pxa25x-pwm", .id = 0, .resource = pxa25x_resource_pwm0, .num_resources = ARRAY_SIZE(pxa25x_resource_pwm0),};static struct resource pxa25x_resource_pwm1[] = { [0] = { .start = 0x40c00000, .end = 0x40c0000f, .flags = IORESOURCE_MEM, },};struct platform_device pxa25x_device_pwm1 = { .name = "pxa25x-pwm", .id = 1, .resource = pxa25x_resource_pwm1, .num_resources = ARRAY_SIZE(pxa25x_resource_pwm1),};static u64 pxa25x_ssp_dma_mask = DMA_BIT_MASK(32);static struct resource pxa25x_resource_ssp[] = { [0] = { .start = 0x41000000, .end = 0x4100001f, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ_SSP, .end = IRQ_SSP, .flags = IORESOURCE_IRQ, }, [2] = { /* DRCMR for RX */ .start = 13, .end = 13, .flags = IORESOURCE_DMA, }, [3] = { /* DRCMR for TX */ .start = 14, .end = 14, .flags = IORESOURCE_DMA, },};struct platform_device pxa25x_device_ssp = { .name = "pxa25x-ssp", .id = 0, .dev = { .dma_mask = &pxa25x_ssp_dma_mask, .coherent_dma_mask = DMA_BIT_MASK(32), }, .resource = pxa25x_resource_ssp, .num_resources = ARRAY_SIZE(pxa25x_resource_ssp),};static u64 pxa25x_nssp_dma_mask = DMA_BIT_MASK(32);static struct resource pxa25x_resource_nssp[] = { [0] = { .start = 0x41400000, .end = 0x4140002f, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ_NSSP, .end = IRQ_NSSP, .flags = IORESOURCE_IRQ, }, [2] = { /* DRCMR for RX */ .start = 15, .end = 15, .flags = IORESOURCE_DMA, }, [3] = { /* DRCMR for TX */ .start = 16, .end = 16, .flags = IORESOURCE_DMA, },};struct platform_device pxa25x_device_nssp = { .name = "pxa25x-nssp", .id = 1, .dev = { .dma_mask = &pxa25x_nssp_dma_mask, .coherent_dma_mask = DMA_BIT_MASK(32), }, .resource = pxa25x_resource_nssp, .num_resources = ARRAY_SIZE(pxa25x_resource_nssp),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -