Lines Matching refs:pin

18  * For each pin controller there are 4 different register ranges that
20 * 1) pin muxing
64 * meson_get_bank() - find the bank containing a given pin
67 * @pin: the pin number
72 static int meson_get_bank(struct meson_pinctrl *pc, unsigned int pin,
78 if (pin >= pc->data->banks[i].first &&
79 pin <= pc->data->banks[i].last) {
89 * meson_calc_reg_and_bit() - calculate register and bit for a pin
91 * @bank: the bank containing the pin
92 * @pin: the pin number
97 static void meson_calc_reg_and_bit(struct meson_bank *bank, unsigned int pin,
103 *bit = (desc->bit + pin - bank->first) * meson_bit_strides[reg_type];
180 unsigned int pin,
188 ret = meson_get_bank(pc, pin, &bank);
192 meson_calc_reg_and_bit(bank, pin, reg_type, &reg, &bit);
198 unsigned int pin,
205 ret = meson_get_bank(pc, pin, &bank);
209 meson_calc_reg_and_bit(bank, pin, reg_type, &reg, &bit);
218 unsigned int pin,
221 return meson_pinconf_set_gpio_bit(pc, pin, MESON_REG_DIR, !out);
225 unsigned int pin)
227 int ret = meson_pinconf_get_gpio_bit(pc, pin, MESON_REG_DIR);
236 unsigned int pin,
239 return meson_pinconf_set_gpio_bit(pc, pin, MESON_REG_OUT, high);
243 unsigned int pin)
245 return meson_pinconf_get_gpio_bit(pc, pin, MESON_REG_OUT);
249 unsigned int pin,
254 ret = meson_pinconf_set_output(pc, pin, true);
258 return meson_pinconf_set_drive(pc, pin, high);
262 unsigned int pin)
268 ret = meson_get_bank(pc, pin, &bank);
272 meson_calc_reg_and_bit(bank, pin, MESON_REG_PULLEN, &reg, &bit);
280 static int meson_pinconf_enable_bias(struct meson_pinctrl *pc, unsigned int pin,
287 ret = meson_get_bank(pc, pin, &bank);
291 meson_calc_reg_and_bit(bank, pin, MESON_REG_PULL, &reg, &bit);
299 meson_calc_reg_and_bit(bank, pin, MESON_REG_PULLEN, &reg, &bit);
308 unsigned int pin,
320 ret = meson_get_bank(pc, pin, &bank);
324 meson_calc_reg_and_bit(bank, pin, MESON_REG_DS, &reg, &bit);
336 "pin %u: invalid drive-strength : %d , default to 4mA\n",
337 pin, drive_strength_ua);
348 static int meson_pinconf_set(struct pinctrl_dev *pcdev, unsigned int pin,
372 ret = meson_pinconf_disable_bias(pc, pin);
375 ret = meson_pinconf_enable_bias(pc, pin, true);
378 ret = meson_pinconf_enable_bias(pc, pin, false);
381 ret = meson_pinconf_set_drive_strength(pc, pin, arg);
384 ret = meson_pinconf_set_output(pc, pin, arg);
387 ret = meson_pinconf_set_output_drive(pc, pin, arg);
400 static int meson_pinconf_get_pull(struct meson_pinctrl *pc, unsigned int pin)
406 ret = meson_get_bank(pc, pin, &bank);
410 meson_calc_reg_and_bit(bank, pin, MESON_REG_PULLEN, &reg, &bit);
419 meson_calc_reg_and_bit(bank, pin, MESON_REG_PULL, &reg, &bit);
435 unsigned int pin,
446 ret = meson_get_bank(pc, pin, &bank);
450 meson_calc_reg_and_bit(bank, pin, MESON_REG_DS, &reg, &bit);
476 static int meson_pinconf_get(struct pinctrl_dev *pcdev, unsigned int pin,
488 if (meson_pinconf_get_pull(pc, pin) == param)
494 ret = meson_pinconf_get_drive_strength(pc, pin, &arg);
499 ret = meson_pinconf_get_output(pc, pin);
505 ret = meson_pinconf_get_output(pc, pin);
509 ret = meson_pinconf_get_drive(pc, pin);
521 dev_dbg(pc->dev, "pinconf for pin %u is %lu\n", pin, *config);