static int gpio_sw_cfg_set(struct gpio_sw_classdev *gpio_sw_cdev,int mul_sel) { struct gpio_sw *gpio = to_gpio(gpio_sw_cdev); struct gpio_sw_platdata *pd = gpio->pdata; int ret ; GPIO_SW_DEBUG("attending gpio_sw_cfg_set \n"); GPIO_SW_DEBUG("pio_hdle is %x \n",gpio->cdev.pio_hdle); ret = gpio_set_one_pin_io_status(gpio->cdev.pio_hdle, mul_sel, pd->name); if ( !ret ) gpio_sw_cdev->mul_sel=mul_sel; GPIO_SW_DEBUG("left gpio_sw_cfg_set \n"); return ret; }
/* Set gpio pin output mode and value */ static int sunxi_gpio_direction_out(struct gpio_chip *chip, unsigned gpio, int val) { int ret; struct sunxi_gpio_chip *sgpio = to_sunxi_gpio(chip); ret = gpio_set_one_pin_io_status(sgpio->data[gpio].gpio_handler, SUNXI_GPIO_OUTPUT, sgpio->data[gpio].pin_name); if (!ret) { sgpio->data[gpio].info.mul_sel = SUNXI_GPIO_OUTPUT; ret = gpio_write_one_pin_value(sgpio->data[gpio].gpio_handler, val, sgpio->data[gpio].pin_name); } return ret; }
/* ******************************************************************************* * pin_init * * Description: * void * * Parameters: * void * * Return value: * void * * note: * void * ******************************************************************************* */ static u32 alloc_pin(user_gpio_set_t *gpio_list) { u32 pin_handle = 0; pin_handle = gpio_request(gpio_list, 1); if(pin_handle == 0){ DMSG_PANIC("ERR: gpio_request failed\n"); return 0; } /* set config, ouput */ gpio_set_one_pin_io_status(pin_handle, 1, NULL); /* reserved is pull down */ gpio_set_one_pin_pull(pin_handle, 2, NULL); return pin_handle; }
/* Set gpio pin input mode */ static int sunxi_gpio_direction_in(struct gpio_chip *chip, unsigned gpio) { int ret = 0; struct sunxi_gpio_chip *sgpio = to_sunxi_gpio(chip); /* EINT mode == INPUT mode, so if we */ /* are in EINT mode - just skip setup */ /* To switch to input mode you should */ /* disable irq first */ if (sgpio->data[gpio].info.mul_sel != sgpio->data[gpio].eint_mux) { ret = gpio_set_one_pin_io_status(sgpio->data[gpio].gpio_handler, SUNXI_GPIO_INPUT, sgpio->data[gpio].pin_name); if (!ret) sgpio->data[gpio].info.mul_sel = SUNXI_GPIO_INPUT; } return ret; }