s3c的gpio控制接口

经常会遇到这四个,来进行gpio的操作

gpio_request(S5PV210_GPD0(2), "GPD0");                               //申请gpio,这里会对该gpio进行上锁

s3c_gpio_setpull(S5PV210_GPD0(2), S3C_GPIO_PULL_UP);    //设置为上升
s3c_gpio_cfgpin(S5PV210_GPD0(2), S3C_GPIO_SFN(1));       //设置gpio的CON寄存器
gpio_set_value(S5PV210_GPD0(2), 0);                                     //设置gpio的DAT寄存器的值

源码分析:

gpio_set_value

void gpio_set_value(unsigned gpio, int on)
{
	int ret = -ENOTSUPP;
	struct gpio_chip *chip;
	unsigned long irq_flags;

	spin_lock_irqsave(&gpio_chips_lock, irq_flags);
	chip = get_gpio_chip_locked(gpio);
	if (chip && chip->write)
		ret = chip->write(chip, gpio, on);
	spin_unlock_irqrestore(&gpio_chips_lock, irq_flags);
}

s3c_gpio_setpull

int s3c_gpio_setpull(unsigned int pin, s3c_gpio_pull_t pull)
{
	struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin);
	unsigned long flags;
	int offset, ret;

	if (!chip)
		return -EINVAL;

	offset = pin - chip->chip.base;//得到偏移值

	s3c_gpio_lock(chip, flags);
	ret = s3c_gpio_do_setpull(chip, offset, pull);//设置为上升
	s3c_gpio_unlock(chip, flags);

	return ret;
}

s3c_gpio_cfgpin

int s3c_gpio_cfgpin(unsigned int pin, unsigned int config)
{
	struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin);
	unsigned long flags;
	int offset;
	int ret;

	if (!chip)
		return -EINVAL;

	offset = pin - chip->chip.base;

	s3c_gpio_lock(chip, flags);
	ret = s3c_gpio_do_setcfg(chip, offset, config);//设置CON值
	s3c_gpio_unlock(chip, flags);

	return ret;
}

s3c_gpio_getcfg

unsigned s3c_gpio_getcfg(unsigned int pin)
{
	struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin);
	unsigned long flags;
	unsigned ret = 0;
	int offset;

	if (chip) {
		offset = pin - chip->chip.base;

		s3c_gpio_lock(chip, flags);
		ret = s3c_gpio_do_getcfg(chip, offset);
		s3c_gpio_unlock(chip, flags);
	}

	return ret;
}

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值