본문 바로가기

GPIO

gpio_request 의 정확한 사용상의 의미 보통 linux kernel driver coding 시에 습관적으로 사용하는 gpio_request 함수에 대해 알아보자.결론부터 이야기 하자면 별 기능을 하지 않는 함수 이다. - 기능 : 특정 GPIO 핀이 현재 다른 설정으로 사용되어 있는 지에 대한 여부를 판단하여 그 결과를 return 함- 반환값 : 이미 어디선가 설정한 핀이면 -EBUSY 를 리턴 어디에서도 설정한 흔적이 없으면 0 을 리턴 즉, 어떤 gpio pin 을 사용하고 싶은데, 다른 driver 와 중복해서 사용하는 위험을 피하고자 할때 사용.특별한 기능은 없다. 더보기
gpio 와 sysfs node 의 정보가 일치하지 않는 문제 gpio를 특정값으로 셋팅하였는데 /sys/class/gpio/gpio[num]/... 에는 반영이 되어 있지 않은 경우가 있다. samsung LSI gpio driver 의 경우 s3c_gpio_cfgpin 나 s3c_gpio_setpull 와 같이 arch\arm\plat-samsung\gpio-config.c 에서 제공하는 gpio control 함수들은 shadow buffer 를 사용하지 않는다. 따라서 shadow buffer 의 값을 기반으로 정보를 주는 sysfs node 에는 gpio-config.c 에서 제공하는 함수를 사용해서 적용한 내용은 반영되지 않는다. 해당 문제를 해결하기 위해서는 drivers\gpio\gpiolib.c 에서 제공하는 함수들을 사용해서 gpio config .. 더보기
GPIO control 을 user 에 넘기는 세련된 방법 아주 특별한 경우에 있어서 gpio control 을 user application 에 넘기는 경우가 있습니다. 저는 sysfs 를 사용할까 했었는데 더 세련된 방법이 있더군요. gpio_request(gpio, "Test_Pin"); gpio_cfgpin(gpio, GPIO_OUTPUT); gpio_direction_output(gpio, 1); gpio_export(gpio, 1); 바로 gpio_export() 라는 함수입니다. 이 함수를 사용하면 /sys/class/gpio/ 위치에 해당 포트에 대한 pin node 가 생성되어서 user 단에서 r/w 가 가능해 집니다. 다만 유의할 점은 gpio_free() 함수를 호출하면 export 된 정보가 사라진 다는 점입니다. 따라서 gpio_free.. 더보기
linux 에서 GPIO로 I2C Emulation 사용하기 mach-모델명.h code 에서 에뮬레이션 i2c device 등록 #define GPIO_TOUCH_SDA S3C64XX_GPC(5) static struct i2c_gpio_platform_data i2c_touch_platdata = { .sda_pin = GPIO_TOUCH_SDA, // gpio number .scl_pin = GPIO_TOUCH_SCL, .udelay = 2, .sda_is_open_drain = 0, .scl_is_open_drain = 0, .scl_is_output_only = 0 }; static struct platform_device sec_device_i2c_touch = { .name = "i2c-gpio", .id = 4, // adepter number .d.. 더보기