三星gpio的相关知识

/* GPIO bank summary:
 *
 * Bank GPIOs Style SlpCon ExtInt Group
 * A 8 4Bit Yes 1
 * B 7 4Bit Yes 1
 * C 8 4Bit Yes 2
 * D 5 4Bit Yes 3
 * E 5 4Bit Yes None
 * F 16 2Bit Yes 4 [1]
 * G 7 4Bit Yes 5
 * H 10 4Bit[2] Yes 6
 * I 16 2Bit Yes None
 * J 12 2Bit Yes None
 * K 16 4Bit[2] No None
 * L 15 4Bit[2] No None
 * M 6 4Bit No IRQ_EINT
 * N 16 2Bit No IRQ_EINT
 * O 16 2Bit Yes 7
 * P 15 2Bit Yes 8
 * Q 9 2Bit Yes 9
 *
 * [1] BANKF pins 14,15 do not form part of the external interrupt sources
 * [2] BANK has two control registers, GPxCON0 and GPxCON1
 */

 

三星gpio的input和output属于不同的function,

一般用这两个来控制:
    s3c_gpio_setpull(S3C64XX_GPN(0), S3C_GPIO_PULL_UP);
    s3c_gpio_cfgpin(S3C64XX_GPN(0), S3C_GPIO_SFN(0));
分析和先是用这两个来初始化,再用gpio_direction_output来设置高低。

但是后来发现,直接调用

s3c_gpio_setpull + gpio_direction_input

或者

gpio_direction_output

可以替换s3c_gpio_cfgpin的功能,因为这两个函数实际上会调用chip->gpio_input/gpio_output

而这个chip结构体在plat-s3c64xx/gpiolib.c中有实现并注册进去了。

 

          if (gpio_is_valid(S3C64XX_GPE(0))) {
  err = gpio_request(S3C64XX_GPE(0), "GPE");

  if (err) {
   printk(KERN_ERR "failed to request GPE for "
    "lcd reset control/n");
   return err;
  }

  gpio_direction_output(S3C64XX_GPE(0), 1);
 }
 gpio_set_value(S3C64XX_GPE(0), 1);
 gpio_free(S3C64XX_GPE(0));

 

S3C好像不能用gpio_set_value。
但据别人说可以,到底是否可以待以后观察。

在armsys6410的kernel中用这个函数来使能wifi,发现编译的内核在跑起来后在probe的时候,core dump掉了。

需要跟踪整个gpio的机制。

是可以使用的,如果要找gpio_set_value这个函数,不能找gpio_set_value函数,要找gpio_set_value这个宏,这个宏定义在mach/gpio.h中。

但是在armsys6410 2.6.28的内核中一用这个函数在mach_smdk6410.c中就会死掉。

原因不明。

 

 

 /*
 申請一個gpio,其實就是檢查該gpio是否空閒,如果空閒就可以使用並將該gpio相應的bit置位
(在gpio_in_use中)。
*/
/*
 釋放一個gpio,其實就是清除gpio相應的控制bit位(在gpio_in_use中)。
*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值