Lines Matching refs:pin
88 * struct pm8xxx_pin_data - dynamic configuration for a pin
91 * @mode: operating mode for the pin (digital, analog or current sink)
92 * @input: pin is input
93 * @output: pin is output
94 * @high_z: pin is floating
165 struct pm8xxx_pin_data *pin)
173 switch (pin->mode) {
175 if (pin->dtest) {
177 ctrl = pin->dtest - 1;
178 } else if (pin->input && pin->output) {
180 if (pin->high_z)
182 else if (pin->pullup == 600)
184 else if (pin->pullup == 10000)
188 } else if (pin->input) {
190 if (pin->dtest)
191 ctrl = pin->dtest;
196 ctrl = !!pin->output_value;
197 if (pin->paired)
201 level = pin->power_source;
204 if (pin->output) {
206 level = pin->aout_level;
207 ctrl = pin->output_value;
208 if (pin->paired)
212 level = pin->amux;
217 level = (pin->drive_strength / 5) - 1;
218 if (pin->dtest) {
220 ctrl = pin->dtest - 1;
223 ctrl = pin->output_value;
224 if (pin->paired)
233 ret = regmap_write(pctrl->regmap, pin->reg, val);
303 struct pm8xxx_pin_data *pin = pctrl->desc.pins[group].drv_data;
305 pin->mode = function;
306 pm8xxx_mpp_update(pctrl, pin);
323 struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
329 arg = pin->pullup;
332 arg = pin->high_z;
335 arg = pin->input;
338 arg = pin->output_value;
341 arg = pin->power_source;
344 arg = pin->drive_strength;
347 arg = pin->dtest;
350 arg = pin->amux;
353 arg = pin->aout_level;
356 arg = pin->paired;
373 struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
384 pin->pullup = arg;
387 pin->high_z = true;
390 pin->input = true;
393 pin->output = true;
394 pin->output_value = !!arg;
397 pin->power_source = arg;
400 pin->drive_strength = arg;
403 pin->dtest = arg;
406 pin->amux = arg;
409 pin->aout_level = arg;
412 pin->paired = !!arg;
422 pm8xxx_mpp_update(pctrl, pin);
445 struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
447 switch (pin->mode) {
449 pin->input = true;
452 pin->input = true;
453 pin->output = true;
459 pm8xxx_mpp_update(pctrl, pin);
469 struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
471 switch (pin->mode) {
473 pin->output = true;
476 pin->input = false;
477 pin->output = true;
480 pin->input = false;
481 pin->output = true;
485 pm8xxx_mpp_update(pctrl, pin);
493 struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
497 if (!pin->input)
498 return !!pin->output_value;
500 ret = irq_get_irqchip_state(pin->irq, IRQCHIP_STATE_LINE_LEVEL, &state);
510 struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
512 pin->output_value = !!value;
514 pm8xxx_mpp_update(pctrl, pin);
534 struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
536 return pin->irq;
549 struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
563 switch (pin->mode) {
566 if (pin->dtest) {
567 seq_printf(s, "dtest%d\n", pin->dtest);
568 } else if (pin->input && pin->output) {
569 if (pin->high_z)
572 seq_printf(s, "bi-dir %dOhm", pin->pullup);
573 } else if (pin->input) {
574 if (pin->dtest)
575 seq_printf(s, "in dtest%d", pin->dtest);
578 } else if (pin->output) {
581 if (!pin->paired) {
582 seq_puts(s, pin->output_value ?
585 seq_puts(s, pin->output_value ?
592 if (pin->output) {
593 seq_printf(s, "out %s ", aout_lvls[pin->aout_level]);
594 if (!pin->paired) {
595 seq_puts(s, pin->output_value ?
598 seq_puts(s, pin->output_value ?
602 seq_printf(s, "input mux %s", amuxs[pin->amux]);
606 seq_printf(s, " sink %dmA ", pin->drive_strength);
607 if (pin->dtest) {
608 seq_printf(s, "dtest%d", pin->dtest);
610 if (!pin->paired) {
611 seq_puts(s, pin->output_value ?
614 seq_puts(s, pin->output_value ?
649 struct pm8xxx_pin_data *pin)
657 ret = regmap_read(pctrl->regmap, pin->reg, &val);
669 pin->mode = PM8XXX_MPP_DIGITAL;
670 pin->input = true;
671 pin->power_source = level;
672 pin->dtest = ctrl;
675 pin->mode = PM8XXX_MPP_DIGITAL;
676 pin->output = true;
677 pin->power_source = level;
678 pin->output_value = !!(ctrl & BIT(0));
679 pin->paired = !!(ctrl & BIT(1));
682 pin->mode = PM8XXX_MPP_DIGITAL;
683 pin->input = true;
684 pin->output = true;
685 pin->power_source = level;
688 pin->pullup = 600;
691 pin->high_z = true;
694 pin->pullup = 10000;
697 pin->pullup = 30000;
702 pin->mode = PM8XXX_MPP_ANALOG;
703 pin->input = true;
704 pin->amux = level;
707 pin->mode = PM8XXX_MPP_ANALOG;
708 pin->output = true;
709 pin->aout_level = level;
710 pin->output_value = !!(ctrl & BIT(0));
711 pin->paired = !!(ctrl & BIT(1));
714 pin->mode = PM8XXX_MPP_SINK;
715 pin->drive_strength = 5 * (level + 1);
716 pin->output_value = !!(ctrl & BIT(0));
717 pin->paired = !!(ctrl & BIT(1));
720 pin->mode = PM8XXX_MPP_SINK;
721 pin->dtest = ctrl + 1;
722 pin->drive_strength = 5 * (level + 1);
725 pin->mode = PM8XXX_MPP_DIGITAL;
726 pin->power_source = level;
728 pin->dtest = ctrl;
835 dev_err(pctrl->dev, "failed to add pin range\n");