int stmp3xxx_request_pin_group(struct pin_group *pin_group, const char *label) { struct pin_desc *pin; int p; int err = 0; /* Allocate and configure pins */ for (p = 0; p < pin_group->nr_pins; p++) { pr_debug("%s: #%d\n", __func__, p); pin = &pin_group->pins[p]; err = stmp3xxx_request_pin(pin->id, pin->fun, label); if (err) goto out_err; stmp3xxx_pin_strength(pin->id, pin->strength, label); stmp3xxx_pin_voltage(pin->id, pin->voltage, label); stmp3xxx_pin_pullup(pin->id, pin->pullup, label); } return 0; out_err: /* Release allocated pins in case of error */ while (--p >= 0) { pr_debug("%s: releasing #%d\n", __func__, p); stmp3xxx_release_pin(pin_group->pins[p].id, label); } return err; }
static void free_bl(struct stmp3xxx_platform_bl_data *data) { stmp3xxx_clearl(BM_PWM_CTRL_PWM2_ENABLE, REGS_PWM_BASE + HW_PWM_CTRL); stmp3xxx_release_pin(PINID_PWM2, "lcd_hx8238a"); clk_disable(pwm_clk); clk_put(pwm_clk); }
void stmp3xxx_release_pin_group(struct pin_group *pin_group, const char *label) { struct pin_desc *pin; int p; for (p = 0; p < pin_group->nr_pins; p++) { pin = &pin_group->pins[p]; stmp3xxx_release_pin(pin->id, label); } }
static void free_bl(struct stmp3xxx_platform_bl_data *data) { HW_PWM_ACTIVEn_WR(2, BF_PWM_ACTIVEn_INACTIVE(0) | BF_PWM_ACTIVEn_ACTIVE(0)); HW_PWM_PERIODn_WR(2, BF_PWM_PERIODn_CDIV(6) | /* divide by 64 */ BF_PWM_PERIODn_INACTIVE_STATE(2) | /* low */ BF_PWM_PERIODn_ACTIVE_STATE(3) | /* high */ BF_PWM_PERIODn_PERIOD(599)); HW_PWM_CTRL_CLR(BM_PWM_CTRL_PWM2_ENABLE); stmp3xxx_pin_voltage(PINID_PWM2, PIN_4MA, "lcd_lms430"); stmp3xxx_pin_strength(PINID_PWM2, PIN_1_8V, "lcd_lms430"); stmp3xxx_release_pin(PINID_PWM2, "lcd_lms430"); clk_disable(pwm_clk); clk_put(pwm_clk); }
static void stmp3xxx_gpio_free(struct gpio_chip *chip, unsigned offset) { stmp3xxx_release_pin(chip->base + offset, "gpio"); }
void gpio_free(unsigned id) { BUG_ON(id > STMP3xxx_GPIO_TOTAL); stmp3xxx_release_pin(id, NULL); }