📄 gumstix-isp1761.c
字号:
#include <linux/module.h>#include <linux/ioport.h>#include <linux/device.h>#include <linux/platform_device.h>#include <linux/delay.h>#include <asm/hardware.h>#include <asm/arch/pxa-regs.h>#include <asm/delay.h>#include <asm/arch/gumstix.h>#define ISP1761_BASE PXA_CS2_PHYS#define ISP1761_GPIO_RESET 52#define ISP1761_GPIO_IRQ 11#define ISP1761_IRQ IRQ_GPIO(ISP1761_GPIO_IRQ)#define ISP1761_GPIO_CS GPIO78_nCS_2_MDstatic struct resource m6_isp1761_resources[] = { [0] = { .name = "isp1761-regs", .start = ISP1761_BASE + 0x00000000, .end = ISP1761_BASE + 0x000fffff, .flags = IORESOURCE_MEM, }, [1] = { .start = ISP1761_IRQ, .end = ISP1761_IRQ, .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL, },};static struct platform_device m6_isp1761_device = { .name = "isp1761", .id = 0, .num_resources = ARRAY_SIZE(m6_isp1761_resources), .resource = m6_isp1761_resources,};static struct platform_device *m6_isp1761_devices[] = { &m6_isp1761_device,};int __init m6_isp1761_init(void){ unsigned int num_devices=ARRAY_SIZE(m6_isp1761_devices); pxa_gpio_mode(GPIO49_nPWE_MD); /* Set up nPWE */ pxa_gpio_mode(ISP1761_GPIO_CS); /* Set up chip-select line. */ pxa_gpio_mode(ISP1761_GPIO_RESET | GPIO_OUT); /* Set up reset line. */ pxa_gpio_mode(ISP1761_GPIO_IRQ | GPIO_IN ); /* Set up IRQ line. */ set_irq_type(ISP1761_IRQ, IRQT_FALLING); /* Reset the chip (hold low for 1ms). */ GPCR(ISP1761_GPIO_RESET) = GPIO_bit(ISP1761_GPIO_RESET); udelay(1000); GPSR(ISP1761_GPIO_RESET) = GPIO_bit(ISP1761_GPIO_RESET); return platform_add_devices(m6_isp1761_devices, num_devices);}void __exit m6_isp1761_exit(void){ platform_device_unregister(&m6_isp1761_device);}module_init(m6_isp1761_init);module_exit(m6_isp1761_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Bernard Blackham <bernard@blackham.com.au>");MODULE_DESCRIPTION("Eyebot M6 board ISP1761 chip initialization driver");MODULE_VERSION("1.0");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -