Lines Matching full:bank
54 * partial bank(subordinate) pins mux config use other bank(main) mux registgers
55 * m_bank_id: the main bank which pin_id from 0, but register bit not from bit 0
56 * m_bit_offs: bit offset the main bank mux register
57 * sid: start pin_id of subordinate bank
58 * eid: end pin_id of subordinate bank
176 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_pctl_set_function() local
180 unsigned int offset = bank->mux_bit_offs; in aml_pctl_set_function()
184 if (bank->p_mux) { in aml_pctl_set_function()
185 p_mux = bank->p_mux; in aml_pctl_set_function()
187 bank = NULL; in aml_pctl_set_function()
190 bank = &info->banks[i]; in aml_pctl_set_function()
195 if (!bank || !bank->reg_mux) in aml_pctl_set_function()
201 return regmap_update_bits(bank->reg_mux, reg, in aml_pctl_set_function()
207 if (!bank->reg_mux) in aml_pctl_set_function()
211 return regmap_update_bits(bank->reg_mux, reg, in aml_pctl_set_function()
281 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_calc_reg_and_bit() local
284 + bank->pc.bit_offset[reg_type]; in aml_calc_reg_and_bit()
285 *reg = (bank->pc.reg_offset[reg_type] + (*bit / 32)) * 4; in aml_calc_reg_and_bit()
295 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_pinconf_get_pull() local
301 ret = regmap_read(bank->reg_gpio, reg, &val); in aml_pinconf_get_pull()
310 ret = regmap_read(bank->reg_gpio, reg, &val); in aml_pinconf_get_pull()
329 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_pinconf_get_drive_strength() local
334 if (!bank->reg_ds) in aml_pinconf_get_drive_strength()
338 ret = regmap_read(bank->reg_ds, reg, &val); in aml_pinconf_get_drive_strength()
368 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_pinconf_get_gpio_bit() local
373 ret = regmap_read(bank->reg_gpio, reg, &val); in aml_pinconf_get_gpio_bit()
452 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_pinconf_disable_bias() local
457 return regmap_update_bits(bank->reg_gpio, reg, BIT(bit), 0); in aml_pinconf_disable_bias()
465 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_pinconf_enable_bias() local
473 ret = regmap_update_bits(bank->reg_gpio, reg, BIT(bit), val); in aml_pinconf_enable_bias()
478 return regmap_update_bits(bank->reg_gpio, reg, BIT(bit), BIT(bit)); in aml_pinconf_enable_bias()
487 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_pinconf_set_drive_strength() local
490 if (!bank->reg_ds) { in aml_pinconf_set_drive_strength()
512 return regmap_update_bits(bank->reg_ds, reg, 0x3 << bit, ds_val << bit); in aml_pinconf_set_drive_strength()
522 struct aml_gpio_bank *bank = gpio_chip_to_bank(range->gc); in aml_pinconf_set_gpio_bit() local
526 return regmap_update_bits(bank->reg_gpio, reg, BIT(bit), in aml_pinconf_set_gpio_bit()
758 * bank which includes gpio-controller property. The other one named
809 static inline int aml_gpio_calc_reg_and_bit(struct aml_gpio_bank *bank, in aml_gpio_calc_reg_and_bit() argument
815 *bit = gpio * aml_bit_strides[reg_type] + bank->pc.bit_offset[reg_type]; in aml_gpio_calc_reg_and_bit()
816 *reg = (bank->pc.reg_offset[reg_type] + (*bit / 32)) * 4; in aml_gpio_calc_reg_and_bit()
824 struct aml_gpio_bank *bank = gpiochip_get_data(chip); in aml_gpio_get_direction() local
828 aml_gpio_calc_reg_and_bit(bank, AML_REG_DIR, gpio, ®, &bit); in aml_gpio_get_direction()
830 ret = regmap_read(bank->reg_gpio, reg, &val); in aml_gpio_get_direction()
839 struct aml_gpio_bank *bank = gpiochip_get_data(chip); in aml_gpio_direction_input() local
842 aml_gpio_calc_reg_and_bit(bank, AML_REG_DIR, gpio, ®, &bit); in aml_gpio_direction_input()
844 return regmap_update_bits(bank->reg_gpio, reg, BIT(bit), BIT(bit)); in aml_gpio_direction_input()
850 struct aml_gpio_bank *bank = gpiochip_get_data(chip); in aml_gpio_direction_output() local
854 aml_gpio_calc_reg_and_bit(bank, AML_REG_DIR, gpio, ®, &bit); in aml_gpio_direction_output()
855 ret = regmap_update_bits(bank->reg_gpio, reg, BIT(bit), 0); in aml_gpio_direction_output()
859 aml_gpio_calc_reg_and_bit(bank, AML_REG_OUT, gpio, ®, &bit); in aml_gpio_direction_output()
861 return regmap_update_bits(bank->reg_gpio, reg, BIT(bit), in aml_gpio_direction_output()
867 struct aml_gpio_bank *bank = gpiochip_get_data(chip); in aml_gpio_set() local
870 aml_gpio_calc_reg_and_bit(bank, AML_REG_OUT, gpio, ®, &bit); in aml_gpio_set()
872 return regmap_update_bits(bank->reg_gpio, reg, BIT(bit), in aml_gpio_set()
878 struct aml_gpio_bank *bank = gpiochip_get_data(chip); in aml_gpio_get() local
881 aml_gpio_calc_reg_and_bit(bank, AML_REG_IN, gpio, ®, &bit); in aml_gpio_get()
882 regmap_read(bank->reg_gpio, reg, &val); in aml_gpio_get()
900 struct aml_gpio_bank *bank) in init_bank_register_bit() argument
907 bank->pc.reg_offset[i] = aml_def_regoffs[i]; in init_bank_register_bit()
908 bank->pc.bit_offset[i] = 0; in init_bank_register_bit()
911 bank->mux_bit_offs = 0; in init_bank_register_bit()
916 if (bank->bank_id == p_mux->m_bank_id) { in init_bank_register_bit()
917 bank->mux_bit_offs = p_mux->m_bit_offs; in init_bank_register_bit()
920 if (p_mux->sid >> 8 == bank->bank_id) { in init_bank_register_bit()
921 bank->p_mux = p_mux; in init_bank_register_bit()
931 struct aml_gpio_bank *bank = &info->banks[bank_nr]; in aml_gpiolib_register_bank() local
937 dev_err(dev, "get num=%d bank identity fail\n", bank_nr); in aml_gpiolib_register_bank()
940 bank->bank_id = ret; in aml_gpiolib_register_bank()
942 bank->reg_mux = aml_map_resource(dev, bank->bank_id, np, "mux"); in aml_gpiolib_register_bank()
943 if (IS_ERR_OR_NULL(bank->reg_mux)) { in aml_gpiolib_register_bank()
944 if (bank->bank_id == AMLOGIC_GPIO_TEST_N || in aml_gpiolib_register_bank()
945 bank->bank_id == AMLOGIC_GPIO_ANALOG) in aml_gpiolib_register_bank()
946 bank->reg_mux = NULL; in aml_gpiolib_register_bank()
948 return dev_err_probe(dev, bank->reg_mux ? PTR_ERR(bank->reg_mux) : -ENOENT, in aml_gpiolib_register_bank()
952 bank->reg_gpio = aml_map_resource(dev, bank->bank_id, np, "gpio"); in aml_gpiolib_register_bank()
953 if (IS_ERR_OR_NULL(bank->reg_gpio)) in aml_gpiolib_register_bank()
954 return dev_err_probe(dev, bank->reg_gpio ? PTR_ERR(bank->reg_gpio) : -ENOENT, in aml_gpiolib_register_bank()
957 bank->reg_ds = aml_map_resource(dev, bank->bank_id, np, "ds"); in aml_gpiolib_register_bank()
958 if (IS_ERR_OR_NULL(bank->reg_ds)) { in aml_gpiolib_register_bank()
960 bank->reg_ds = bank->reg_gpio; in aml_gpiolib_register_bank()
963 bank->gpio_chip = aml_gpio_template; in aml_gpiolib_register_bank()
964 bank->gpio_chip.base = -1; in aml_gpiolib_register_bank()
965 bank->gpio_chip.ngpio = aml_bank_pins(np); in aml_gpiolib_register_bank()
966 bank->gpio_chip.fwnode = of_fwnode_handle(np); in aml_gpiolib_register_bank()
967 bank->gpio_chip.parent = dev; in aml_gpiolib_register_bank()
969 init_bank_register_bit(info, bank); in aml_gpiolib_register_bank()
970 bank->gpio_chip.label = aml_bank_name[bank->bank_id]; in aml_gpiolib_register_bank()
972 bank->pin_base = bank->bank_id << 8; in aml_gpiolib_register_bank()
985 int i = 0, j = 0, k = 0, bank; in aml_pctl_probe_dt() local
990 return dev_err_probe(dev, -EINVAL, "you need at least one gpio bank\n"); in aml_pctl_probe_dt()
1015 bank = 0; in aml_pctl_probe_dt()
1021 ret = aml_gpiolib_register_bank(info, bank, child); in aml_pctl_probe_dt()
1025 k = info->banks[bank].pin_base; in aml_pctl_probe_dt()
1026 bank_name = info->banks[bank].gpio_chip.label; in aml_pctl_probe_dt()
1029 info->banks[bank].gpio_chip.ngpio); in aml_pctl_probe_dt()
1033 for (j = 0; j < info->banks[bank].gpio_chip.ngpio; j++, k++) { in aml_pctl_probe_dt()
1038 bank++; in aml_pctl_probe_dt()