在视频14的基础上做
1.利用拨码开关来实现GPIO输入
所以AP_SLEEP对应GPC0_3,然后在drivers/gpio/gpio-exynos4.c中对应EXYNOS4_GPC0(0)
XEINT6→GPX0_6→EXYNOS4_GPX0(6)
读寄存器手册分析流程:
- 设置寄存器为输入 GPC0CON
- 读寄存器值 GPC0DAT
- 不上拉,不下拉 GPC0PUD
2.GPIO的输入需要哪些函数,从arch\arm\plat-samsung\gpio-config.c中找
- 申请gpio_request
- 读寄存器gpio_get_value
- 设置GPIO为输入模式s3c_gpio_cfgpin S3C_GPIO_INPUT
- 设置上拉下拉s3c_gpio_setpull S3C_GPIO_PULL_NONE
- 释放GPIO gpio_free
3.平台文件中设备注册
在文件arch/arm/mach-exynos/mach-itop4412.c中:
struct platform_device s3c_device_read_gpio_ctl = {
.name = "read_gpio_ctl",
.id = -1,
};
&s3c_device_read_gpio_ctl,
在init_lcd_type函数中request了GPIO。所以在get_lcd_type需要释放GPIO
gpio_free(EXYNOS4_GPC0(3));
gpio_free(EXYNOS4_GPX0(6));
4.Makefile修改
TARGET_NAME = read_gpio APP_NAME = app_read_gpio obj-m += $(TARGET_NAME).o KDIR := /home/topeet/chen/kernel-3.0/iTop4412_Kernel_3.0 PWD ?= $(shell pwd) all:app make -C $(KDIR) M=$(PWD) modules app:$(APP_NAME) arm-none-linux-gnueabi-gcc $(APP_NAME).c -o $(APP_NAME) -static clean: rm -rf *.o *.ko *.mod.c *.symvers *.order \ .$(TARGET_NAME)* $(APP_NAME)