Lines Matching full:pad

227 			  struct pmic_gpio_pad *pad, unsigned int addr)  in pmic_gpio_read()  argument
232 ret = regmap_read(state->map, pad->base + addr, &val); in pmic_gpio_read()
242 struct pmic_gpio_pad *pad, unsigned int addr, in pmic_gpio_write() argument
247 ret = regmap_write(state->map, pad->base + addr, val); in pmic_gpio_write()
307 struct pmic_gpio_pad *pad; in pmic_gpio_set_mux() local
316 pad = pctldev->desc->pins[pin].drv_data; in pmic_gpio_set_mux()
321 if (!pad->lv_mv_type) { in pmic_gpio_set_mux()
332 pad->function = function; in pmic_gpio_set_mux()
334 if (pad->analog_pass) in pmic_gpio_set_mux()
336 else if (pad->output_enabled && pad->input_enabled) in pmic_gpio_set_mux()
338 else if (pad->output_enabled) in pmic_gpio_set_mux()
343 if (pad->lv_mv_type) { in pmic_gpio_set_mux()
344 ret = pmic_gpio_write(state, pad, in pmic_gpio_set_mux()
349 val = pad->atest - 1; in pmic_gpio_set_mux()
350 ret = pmic_gpio_write(state, pad, in pmic_gpio_set_mux()
355 val = pad->out_value in pmic_gpio_set_mux()
357 val |= pad->function in pmic_gpio_set_mux()
359 ret = pmic_gpio_write(state, pad, in pmic_gpio_set_mux()
365 val |= pad->function << PMIC_GPIO_REG_MODE_FUNCTION_SHIFT; in pmic_gpio_set_mux()
366 val |= pad->out_value & PMIC_GPIO_REG_MODE_VALUE_SHIFT; in pmic_gpio_set_mux()
368 ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_MODE_CTL, val); in pmic_gpio_set_mux()
373 val = pad->is_enabled << PMIC_GPIO_REG_MASTER_EN_SHIFT; in pmic_gpio_set_mux()
375 return pmic_gpio_write(state, pad, PMIC_GPIO_REG_EN_CTL, val); in pmic_gpio_set_mux()
389 struct pmic_gpio_pad *pad; in pmic_gpio_config_get() local
392 pad = pctldev->desc->pins[pin].drv_data; in pmic_gpio_config_get()
396 if (pad->buffer_type != PMIC_GPIO_OUT_BUF_CMOS) in pmic_gpio_config_get()
401 if (pad->buffer_type != PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS) in pmic_gpio_config_get()
406 if (pad->buffer_type != PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS) in pmic_gpio_config_get()
411 if (pad->pullup != PMIC_GPIO_PULL_DOWN) in pmic_gpio_config_get()
416 if (pad->pullup != PMIC_GPIO_PULL_DISABLE) in pmic_gpio_config_get()
421 if (pad->pullup != PMIC_GPIO_PULL_UP_30) in pmic_gpio_config_get()
426 if (pad->is_enabled) in pmic_gpio_config_get()
431 arg = pad->power_source; in pmic_gpio_config_get()
434 if (!pad->input_enabled) in pmic_gpio_config_get()
439 arg = pad->output_enabled; in pmic_gpio_config_get()
442 arg = pad->out_value; in pmic_gpio_config_get()
445 arg = pad->pullup; in pmic_gpio_config_get()
448 switch (pad->strength) { in pmic_gpio_config_get()
456 arg = pad->strength; in pmic_gpio_config_get()
461 arg = pad->atest; in pmic_gpio_config_get()
464 arg = pad->analog_pass; in pmic_gpio_config_get()
467 arg = pad->dtest_buffer; in pmic_gpio_config_get()
481 struct pmic_gpio_pad *pad; in pmic_gpio_config_set() local
486 pad = pctldev->desc->pins[pin].drv_data; in pmic_gpio_config_set()
488 pad->is_enabled = true; in pmic_gpio_config_set()
495 pad->buffer_type = PMIC_GPIO_OUT_BUF_CMOS; in pmic_gpio_config_set()
498 if (!pad->have_buffer) in pmic_gpio_config_set()
500 pad->buffer_type = PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS; in pmic_gpio_config_set()
503 if (!pad->have_buffer) in pmic_gpio_config_set()
505 pad->buffer_type = PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS; in pmic_gpio_config_set()
508 pad->pullup = PMIC_GPIO_PULL_DISABLE; in pmic_gpio_config_set()
511 pad->pullup = PMIC_GPIO_PULL_UP_30; in pmic_gpio_config_set()
515 pad->pullup = PMIC_GPIO_PULL_DOWN; in pmic_gpio_config_set()
517 pad->pullup = PMIC_GPIO_PULL_DISABLE; in pmic_gpio_config_set()
520 pad->is_enabled = false; in pmic_gpio_config_set()
523 if (arg >= pad->num_sources) in pmic_gpio_config_set()
525 pad->power_source = arg; in pmic_gpio_config_set()
528 pad->input_enabled = arg ? true : false; in pmic_gpio_config_set()
531 pad->output_enabled = arg ? true : false; in pmic_gpio_config_set()
534 pad->output_enabled = true; in pmic_gpio_config_set()
535 pad->out_value = arg; in pmic_gpio_config_set()
540 pad->pullup = arg; in pmic_gpio_config_set()
547 pad->strength = PMIC_GPIO_OUT_STRENGTH_HIGH; in pmic_gpio_config_set()
550 pad->strength = PMIC_GPIO_OUT_STRENGTH_LOW; in pmic_gpio_config_set()
553 pad->strength = arg; in pmic_gpio_config_set()
558 if (!pad->lv_mv_type || arg > 4) in pmic_gpio_config_set()
560 pad->atest = arg; in pmic_gpio_config_set()
563 if (!pad->lv_mv_type) in pmic_gpio_config_set()
565 pad->analog_pass = true; in pmic_gpio_config_set()
570 pad->dtest_buffer = arg; in pmic_gpio_config_set()
577 val = pad->power_source << PMIC_GPIO_REG_VIN_SHIFT; in pmic_gpio_config_set()
579 ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_DIG_VIN_CTL, val); in pmic_gpio_config_set()
583 val = pad->pullup << PMIC_GPIO_REG_PULL_SHIFT; in pmic_gpio_config_set()
585 ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_DIG_PULL_CTL, val); in pmic_gpio_config_set()
589 val = pad->buffer_type << PMIC_GPIO_REG_OUT_TYPE_SHIFT; in pmic_gpio_config_set()
590 val |= pad->strength << PMIC_GPIO_REG_OUT_STRENGTH_SHIFT; in pmic_gpio_config_set()
592 ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_DIG_OUT_CTL, val); in pmic_gpio_config_set()
596 if (pad->dtest_buffer == 0) { in pmic_gpio_config_set()
599 if (pad->lv_mv_type) { in pmic_gpio_config_set()
600 val = pad->dtest_buffer - 1; in pmic_gpio_config_set()
603 val = BIT(pad->dtest_buffer - 1); in pmic_gpio_config_set()
606 ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_DIG_IN_CTL, val); in pmic_gpio_config_set()
610 if (pad->analog_pass) in pmic_gpio_config_set()
612 else if (pad->output_enabled && pad->input_enabled) in pmic_gpio_config_set()
614 else if (pad->output_enabled) in pmic_gpio_config_set()
619 if (pad->lv_mv_type) { in pmic_gpio_config_set()
620 ret = pmic_gpio_write(state, pad, in pmic_gpio_config_set()
625 val = pad->atest - 1; in pmic_gpio_config_set()
626 ret = pmic_gpio_write(state, pad, in pmic_gpio_config_set()
631 val = pad->out_value in pmic_gpio_config_set()
633 val |= pad->function in pmic_gpio_config_set()
635 ret = pmic_gpio_write(state, pad, in pmic_gpio_config_set()
641 val |= pad->function << PMIC_GPIO_REG_MODE_FUNCTION_SHIFT; in pmic_gpio_config_set()
642 val |= pad->out_value & PMIC_GPIO_REG_MODE_VALUE_SHIFT; in pmic_gpio_config_set()
644 ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_MODE_CTL, val); in pmic_gpio_config_set()
649 val = pad->is_enabled << PMIC_GPIO_REG_MASTER_EN_SHIFT; in pmic_gpio_config_set()
651 ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_EN_CTL, val); in pmic_gpio_config_set()
660 struct pmic_gpio_pad *pad; in pmic_gpio_config_dbg_show() local
674 pad = pctldev->desc->pins[pin].drv_data; in pmic_gpio_config_dbg_show()
678 val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_EN_CTL); in pmic_gpio_config_dbg_show()
683 if (pad->input_enabled) { in pmic_gpio_config_dbg_show()
684 ret = pmic_gpio_read(state, pad, PMIC_MPP_REG_RT_STS); in pmic_gpio_config_dbg_show()
689 pad->out_value = ret; in pmic_gpio_config_dbg_show()
695 function = pad->function; in pmic_gpio_config_dbg_show()
696 if (!pad->lv_mv_type && in pmic_gpio_config_dbg_show()
697 pad->function >= PMIC_GPIO_FUNC_INDEX_FUNC3) in pmic_gpio_config_dbg_show()
701 if (pad->analog_pass) in pmic_gpio_config_dbg_show()
705 pad->output_enabled ? "out" : "in"); in pmic_gpio_config_dbg_show()
706 seq_printf(s, " %-4s", str_high_low(pad->out_value)); in pmic_gpio_config_dbg_show()
708 seq_printf(s, " vin-%d", pad->power_source); in pmic_gpio_config_dbg_show()
709 seq_printf(s, " %-27s", biases[pad->pullup]); in pmic_gpio_config_dbg_show()
710 seq_printf(s, " %-10s", buffer_types[pad->buffer_type]); in pmic_gpio_config_dbg_show()
711 seq_printf(s, " %-7s", strengths[pad->strength]); in pmic_gpio_config_dbg_show()
712 seq_printf(s, " atest-%d", pad->atest); in pmic_gpio_config_dbg_show()
713 seq_printf(s, " dtest-%d", pad->dtest_buffer); in pmic_gpio_config_dbg_show()
748 struct pmic_gpio_pad *pad; in pmic_gpio_get() local
751 pad = state->ctrl->desc->pins[pin].drv_data; in pmic_gpio_get()
753 if (!pad->is_enabled) in pmic_gpio_get()
756 if (pad->input_enabled) { in pmic_gpio_get()
757 ret = pmic_gpio_read(state, pad, PMIC_MPP_REG_RT_STS); in pmic_gpio_get()
761 pad->out_value = ret & PMIC_MPP_REG_RT_STS_VAL_MASK; in pmic_gpio_get()
764 return !!pad->out_value; in pmic_gpio_get()
813 struct pmic_gpio_pad *pad) in pmic_gpio_populate() argument
817 type = pmic_gpio_read(state, pad, PMIC_GPIO_REG_TYPE); in pmic_gpio_populate()
823 type, pad->base); in pmic_gpio_populate()
827 subtype = pmic_gpio_read(state, pad, PMIC_GPIO_REG_SUBTYPE); in pmic_gpio_populate()
833 pad->have_buffer = true; in pmic_gpio_populate()
836 pad->num_sources = 4; in pmic_gpio_populate()
839 pad->have_buffer = true; in pmic_gpio_populate()
842 pad->num_sources = 8; in pmic_gpio_populate()
845 pad->num_sources = 1; in pmic_gpio_populate()
846 pad->have_buffer = true; in pmic_gpio_populate()
847 pad->lv_mv_type = true; in pmic_gpio_populate()
850 pad->num_sources = 2; in pmic_gpio_populate()
851 pad->have_buffer = true; in pmic_gpio_populate()
852 pad->lv_mv_type = true; in pmic_gpio_populate()
855 pad->num_sources = 2; in pmic_gpio_populate()
856 pad->have_buffer = true; in pmic_gpio_populate()
857 pad->lv_mv_type = true; in pmic_gpio_populate()
860 pad->num_sources = 3; in pmic_gpio_populate()
861 pad->have_buffer = true; in pmic_gpio_populate()
862 pad->lv_mv_type = true; in pmic_gpio_populate()
869 if (pad->lv_mv_type) { in pmic_gpio_populate()
870 val = pmic_gpio_read(state, pad, in pmic_gpio_populate()
875 pad->out_value = !!(val & PMIC_GPIO_LV_MV_OUTPUT_INVERT); in pmic_gpio_populate()
876 pad->function = val & PMIC_GPIO_LV_MV_OUTPUT_SOURCE_SEL_MASK; in pmic_gpio_populate()
878 val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_MODE_CTL); in pmic_gpio_populate()
884 val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_MODE_CTL); in pmic_gpio_populate()
888 pad->out_value = val & PMIC_GPIO_REG_MODE_VALUE_SHIFT; in pmic_gpio_populate()
892 pad->function = val >> PMIC_GPIO_REG_MODE_FUNCTION_SHIFT; in pmic_gpio_populate()
893 pad->function &= PMIC_GPIO_REG_MODE_FUNCTION_MASK; in pmic_gpio_populate()
898 pad->input_enabled = true; in pmic_gpio_populate()
899 pad->output_enabled = false; in pmic_gpio_populate()
902 pad->input_enabled = false; in pmic_gpio_populate()
903 pad->output_enabled = true; in pmic_gpio_populate()
906 pad->input_enabled = true; in pmic_gpio_populate()
907 pad->output_enabled = true; in pmic_gpio_populate()
910 if (!pad->lv_mv_type) in pmic_gpio_populate()
912 pad->analog_pass = true; in pmic_gpio_populate()
919 val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_DIG_VIN_CTL); in pmic_gpio_populate()
923 pad->power_source = val >> PMIC_GPIO_REG_VIN_SHIFT; in pmic_gpio_populate()
924 pad->power_source &= PMIC_GPIO_REG_VIN_MASK; in pmic_gpio_populate()
926 val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_DIG_PULL_CTL); in pmic_gpio_populate()
930 pad->pullup = val >> PMIC_GPIO_REG_PULL_SHIFT; in pmic_gpio_populate()
931 pad->pullup &= PMIC_GPIO_REG_PULL_MASK; in pmic_gpio_populate()
933 val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_DIG_IN_CTL); in pmic_gpio_populate()
937 if (pad->lv_mv_type && (val & PMIC_GPIO_LV_MV_DIG_IN_DTEST_EN)) in pmic_gpio_populate()
938 pad->dtest_buffer = in pmic_gpio_populate()
940 else if (!pad->lv_mv_type) in pmic_gpio_populate()
941 pad->dtest_buffer = ffs(val); in pmic_gpio_populate()
943 pad->dtest_buffer = 0; in pmic_gpio_populate()
945 val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_DIG_OUT_CTL); in pmic_gpio_populate()
949 pad->strength = val >> PMIC_GPIO_REG_OUT_STRENGTH_SHIFT; in pmic_gpio_populate()
950 pad->strength &= PMIC_GPIO_REG_OUT_STRENGTH_MASK; in pmic_gpio_populate()
952 pad->buffer_type = val >> PMIC_GPIO_REG_OUT_TYPE_SHIFT; in pmic_gpio_populate()
953 pad->buffer_type &= PMIC_GPIO_REG_OUT_TYPE_MASK; in pmic_gpio_populate()
955 if (pad->lv_mv_type) { in pmic_gpio_populate()
956 val = pmic_gpio_read(state, pad, in pmic_gpio_populate()
960 pad->atest = (val & PMIC_GPIO_LV_MV_ANA_MUX_SEL_MASK) + 1; in pmic_gpio_populate()
964 pad->is_enabled = true; in pmic_gpio_populate()
1060 struct pmic_gpio_pad *pad, *pads; in pmic_gpio_probe() local
1113 pad = &pads[i]; in pmic_gpio_probe()
1114 pindesc->drv_data = pad; in pmic_gpio_probe()
1118 pad->base = reg + i * PMIC_GPIO_ADDRESS_RANGE; in pmic_gpio_probe()
1120 ret = pmic_gpio_populate(state, pad); in pmic_gpio_probe()