Lines Matching defs:bank

236  * given a pin number that is local to a pin controller, find out the pin bank
237 * and the register base of the pin bank.
769 static void rockchip_get_recalced_mux(struct rockchip_pin_bank *bank, int pin, int *reg, u8 *bit, int *mask)
771 struct rockchip_pinctrl *info = bank->drvdata;
778 if (data->num == bank->bank_num && data->pin == pin) {
1351 static bool rockchip_get_mux_route(struct rockchip_pin_bank *bank, int pin, int mux, u32 *loc, u32 *reg, u32 *value)
1353 struct rockchip_pinctrl *info = bank->drvdata;
1360 if ((data->bank_num == bank->bank_num) && (data->pin == pin) && (data->func == mux)) {
1376 static int rockchip_get_mux(struct rockchip_pin_bank *bank, int pin)
1378 struct rockchip_pinctrl *info = bank->drvdata;
1389 if (bank->iomux[iomux_num].type & IOMUX_UNROUTED) {
1394 if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY) {
1398 if (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU) {
1400 } else if (bank->iomux[iomux_num].type & IOMUX_L_SOURCE_PMU) {
1407 mux_type = bank->iomux[iomux_num].type;
1408 reg = bank->iomux[iomux_num].offset;
1426 if (bank->recalced_mask & BIT(pin)) {
1427 rockchip_get_recalced_mux(bank, pin, &reg, &bit, &mask);
1438 static int rockchip_verify_mux(struct rockchip_pin_bank *bank, int pin, int mux)
1440 struct rockchip_pinctrl *info = bank->drvdata;
1447 if (bank->iomux[iomux_num].type & IOMUX_UNROUTED) {
1452 if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY) {
1471 * @bank: pin bank to change
1475 static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
1477 struct rockchip_pinctrl *info = bank->drvdata;
1484 ret = rockchip_verify_mux(bank, pin, mux);
1489 if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY) {
1493 dev_dbg(info->dev, "setting mux of GPIO%d-%d to %d\n", bank->bank_num, pin, mux);
1495 if (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU) {
1497 } else if (bank->iomux[iomux_num].type & IOMUX_L_SOURCE_PMU) {
1504 mux_type = bank->iomux[iomux_num].type;
1505 reg = bank->iomux[iomux_num].offset;
1523 if (bank->recalced_mask & BIT(pin)) {
1524 rockchip_get_recalced_mux(bank, pin, &reg, &bit, &mask);
1531 if (bank->route_mask & BIT(pin)) {
1532 if (rockchip_get_mux_route(bank, pin, mux, &route_location, &route_reg, &route_val)) {
1577 static void px30_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1580 struct rockchip_pinctrl *info = bank->drvdata;
1582 /* The first 32 pins of the first bank are located in PMU */
1583 if (bank->bank_num == 0) {
1590 /* correct the offset, as we're starting with the 2nd bank */
1592 *reg += bank->bank_num * PX30_PULL_BANK_STRIDE;
1606 static void px30_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1609 struct rockchip_pinctrl *info = bank->drvdata;
1611 /* The first 32 pins of the first bank are located in PMU */
1612 if (bank->bank_num == 0) {
1619 /* correct the offset, as we're starting with the 2nd bank */
1621 *reg += bank->bank_num * PX30_DRV_BANK_STRIDE;
1635 static int px30_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1638 struct rockchip_pinctrl *info = bank->drvdata;
1641 if (bank->bank_num == 0) {
1649 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * PX30_SCHMITT_BANK_STRIDE;
1664 static void rv1108_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1667 struct rockchip_pinctrl *info = bank->drvdata;
1669 /* The first 24 pins of the first bank are located in PMU */
1670 if (bank->bank_num == 0) {
1676 /* correct the offset, as we're starting with the 2nd bank */
1678 *reg += bank->bank_num * RV1108_PULL_BANK_STRIDE;
1692 static void rv1108_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1695 struct rockchip_pinctrl *info = bank->drvdata;
1697 /* The first 24 pins of the first bank are located in PMU */
1698 if (bank->bank_num == 0) {
1705 /* correct the offset, as we're starting with the 2nd bank */
1707 *reg += bank->bank_num * RV1108_DRV_BANK_STRIDE;
1721 static int rv1108_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
1724 struct rockchip_pinctrl *info = bank->drvdata;
1727 if (bank->bank_num == 0) {
1735 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RV1108_SCHMITT_BANK_STRIDE;
1750 static void rv1126_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1753 struct rockchip_pinctrl *info = bank->drvdata;
1755 /* The first 24 pins of the first bank are located in PMU */
1756 if (bank->bank_num == 0) {
1771 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RV1126_PULL_BANK_STRIDE;
1785 static void rv1126_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1788 struct rockchip_pinctrl *info = bank->drvdata;
1790 /* The first 24 pins of the first bank are located in PMU */
1791 if (bank->bank_num == 0) {
1807 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RV1126_DRV_BANK_STRIDE;
1821 static int rv1126_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
1824 struct rockchip_pinctrl *info = bank->drvdata;
1827 if (bank->bank_num == 0) {
1843 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RV1126_SCHMITT_BANK_STRIDE;
1855 static int rk3308_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
1858 struct rockchip_pinctrl *info = bank->drvdata;
1863 *reg += bank->bank_num * RK3308_SCHMITT_BANK_STRIDE;
1876 static void rk1808_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1879 struct rockchip_pinctrl *info = bank->drvdata;
1881 if (bank->bank_num == 0) {
1887 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RK1808_PULL_BANK_STRIDE;
1901 static void rk1808_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1904 struct rockchip_pinctrl *info = bank->drvdata;
1906 if (bank->bank_num == 0) {
1912 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RK1808_DRV_BANK_STRIDE;
1925 static int rk1808_calc_slew_rate_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
1928 struct rockchip_pinctrl *info = bank->drvdata;
1930 if (bank->bank_num == 0) {
1936 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RK1808_SR_BANK_STRIDE;
1949 static int rk1808_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
1952 struct rockchip_pinctrl *info = bank->drvdata;
1954 if (bank->bank_num == 0) {
1960 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RK1808_SCHMITT_BANK_STRIDE;
1972 static void rk2928_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1975 struct rockchip_pinctrl *info = bank->drvdata;
1979 *reg += bank->bank_num * RK2928_PULL_BANK_STRIDE;
1987 static void rk3128_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
1990 struct rockchip_pinctrl *info = bank->drvdata;
1994 *reg += bank->bank_num * RK2928_PULL_BANK_STRIDE;
2006 static void rk3188_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2009 struct rockchip_pinctrl *info = bank->drvdata;
2011 /* The first 12 pins of the first bank are located elsewhere */
2012 if (bank->bank_num == 0 && pin_num < PINCTRL_ROCKCHIP_TWELVE) {
2013 *regmap = info->regmap_pmu ? info->regmap_pmu : bank->regmap_pull;
2024 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
2038 static void rk3288_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2041 struct rockchip_pinctrl *info = bank->drvdata;
2043 /* The first 24 pins of the first bank are located in PMU */
2044 if (bank->bank_num == 0) {
2055 /* correct the offset, as we're starting with the 2nd bank */
2057 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
2071 static void rk3288_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2074 struct rockchip_pinctrl *info = bank->drvdata;
2076 /* The first 24 pins of the first bank are located in PMU */
2077 if (bank->bank_num == 0) {
2088 /* correct the offset, as we're starting with the 2nd bank */
2090 *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
2100 static void rk3228_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2103 struct rockchip_pinctrl *info = bank->drvdata;
2107 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
2116 static void rk3228_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2119 struct rockchip_pinctrl *info = bank->drvdata;
2123 *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
2132 static void rk3308_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2135 struct rockchip_pinctrl *info = bank->drvdata;
2139 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
2148 static void rk3308_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2151 struct rockchip_pinctrl *info = bank->drvdata;
2155 *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
2165 static void rk3368_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2168 struct rockchip_pinctrl *info = bank->drvdata;
2170 /* The first 32 pins of the first bank are located in PMU */
2171 if (bank->bank_num == 0) {
2182 /* correct the offset, as we're starting with the 2nd bank */
2184 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
2195 static void rk3368_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2198 struct rockchip_pinctrl *info = bank->drvdata;
2200 /* The first 32 pins of the first bank are located in PMU */
2201 if (bank->bank_num == 0) {
2212 /* correct the offset, as we're starting with the 2nd bank */
2214 *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
2226 static void rk3399_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2229 struct rockchip_pinctrl *info = bank->drvdata;
2232 if ((bank->bank_num == 0) || (bank->bank_num == PINCTRL_ROCKCHIP_ONE)) {
2236 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
2245 /* correct the offset, as we're starting with the 3rd bank */
2247 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
2255 static void rk3399_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2258 struct rockchip_pinctrl *info = bank->drvdata;
2262 if ((bank->bank_num == 0) || (bank->bank_num == PINCTRL_ROCKCHIP_ONE)) {
2268 *reg = bank->drv[drv_num].offset;
2269 if ((bank->drv[drv_num].drv_type == DRV_TYPE_IO_1V8_3V0_AUTO) ||
2270 (bank->drv[drv_num].drv_type == DRV_TYPE_IO_3V3_ONLY)) {
2282 static int rk3568_calc_slew_rate_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
2285 struct rockchip_pinctrl *info = bank->drvdata;
2287 if (bank->bank_num == 0) {
2293 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RK3568_SR_BANK_STRIDE;
2307 static void rk3568_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2310 struct rockchip_pinctrl *info = bank->drvdata;
2312 if (bank->bank_num == 0) {
2315 *reg += bank->bank_num * RK3568_PULL_BANK_STRIDE;
2323 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RK3568_PULL_BANK_STRIDE;
2337 static void rk3568_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap, int *reg,
2340 struct rockchip_pinctrl *info = bank->drvdata;
2342 /* The first 32 pins of the first bank are located in PMU */
2343 if (bank->bank_num == 0) {
2353 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RK3568_DRV_BANK_STRIDE;
2361 if ((bank->bank_num == 1 && (pin_num == PINCTRL_ROCKCHIP_FIFTEEN || pin_num == PINCTRL_ROCKCHIP_TWENTYTHREE ||
2363 ((bank->bank_num == PINCTRL_ROCKCHIP_TWO || bank->bank_num == PINCTRL_ROCKCHIP_THREE ||
2364 bank->bank_num == PINCTRL_ROCKCHIP_FOUR) &&
2381 static int rockchip_get_drive_perpin(struct rockchip_pin_bank *bank, int pin_num)
2383 struct rockchip_pinctrl *info = bank->drvdata;
2389 int drv_type = bank->drv[pin_num / 8].drv_type;
2391 ctrl->drv_calc_reg(bank, pin_num, &regmap, &reg, &bit);
2458 static int rockchip_set_drive_perpin(struct rockchip_pin_bank *bank, int pin_num, int strength)
2460 struct rockchip_pinctrl *info = bank->drvdata;
2466 int drv_type = bank->drv[pin_num / 8].drv_type;
2468 dev_dbg(info->dev, "setting drive of GPIO%d-%d to %d\n", bank->bank_num, pin_num, strength);
2470 ctrl->drv_calc_reg(bank, pin_num, &regmap, &reg, &bit);
2559 if (bank->bank_num == 1 && pin_num == PINCTRL_ROCKCHIP_TWENTYONE) {
2561 } else if (bank->bank_num == PINCTRL_ROCKCHIP_TWO && pin_num == PINCTRL_ROCKCHIP_TWO) {
2563 } else if (bank->bank_num == PINCTRL_ROCKCHIP_TWO && pin_num == PINCTRL_ROCKCHIP_EIGHT) {
2565 } else if (bank->bank_num == PINCTRL_ROCKCHIP_THREE && pin_num == 0) {
2567 } else if (bank->bank_num == PINCTRL_ROCKCHIP_THREE && pin_num == PINCTRL_ROCKCHIP_SIX) {
2569 } else if (bank->bank_num == PINCTRL_ROCKCHIP_FOUR && pin_num == 0) {
2593 static int rockchip_get_pull(struct rockchip_pin_bank *bank, int pin_num)
2595 struct rockchip_pinctrl *info = bank->drvdata;
2607 ctrl->pull_calc_reg(bank, pin_num, &regmap, &reg, &bit);
2628 pull_type = bank->pull_type[pin_num / 0x8];
2639 static int rockchip_set_pull(struct rockchip_pin_bank *bank, int pin_num, int pull)
2641 struct rockchip_pinctrl *info = bank->drvdata;
2648 dev_dbg(info->dev, "setting pull of GPIO%d-%d to %d\n", bank->bank_num, pin_num, pull);
2655 ctrl->pull_calc_reg(bank, pin_num, &regmap, &reg, &bit);
2676 pull_type = bank->pull_type[pin_num / PINCTRL_ROCKCHIP_EIGHT];
2688 if (ctrl->type == RK3568 && bank->bank_num == 0 && pin_num >= PINCTRL_ROCKCHIP_TWENTYSEVEN &&
2720 static int rk3328_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
2723 struct rockchip_pinctrl *info = bank->drvdata;
2728 *reg += bank->bank_num * RK3328_SCHMITT_BANK_STRIDE;
2741 static int rk3568_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
2744 struct rockchip_pinctrl *info = bank->drvdata;
2746 if (bank->bank_num == 0) {
2752 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * RK3568_SCHMITT_BANK_STRIDE;
2762 static int rockchip_get_schmitt(struct rockchip_pin_bank *bank, int pin_num)
2764 struct rockchip_pinctrl *info = bank->drvdata;
2771 ret = ctrl->schmitt_calc_reg(bank, pin_num, &regmap, &reg, &bit);
2792 static int rockchip_set_schmitt(struct rockchip_pin_bank *bank, int pin_num, int enable)
2794 struct rockchip_pinctrl *info = bank->drvdata;
2801 dev_dbg(info->dev, "setting input schmitt of GPIO%d-%d to %d\n", bank->bank_num, pin_num, enable);
2803 ret = ctrl->schmitt_calc_reg(bank, pin_num, &regmap, &reg, &bit);
2831 static int px30_calc_slew_rate_reg_and_bit(struct rockchip_pin_bank *bank, int pin_num, struct regmap **regmap,
2834 struct rockchip_pinctrl *info = bank->drvdata;
2837 if (bank->bank_num == 0) {
2845 *reg += (bank->bank_num - PINCTRL_ROCKCHIP_ONE) * PX30_SLEW_RATE_BANK_STRIDE;
2853 static int rockchip_get_slew_rate(struct rockchip_pin_bank *bank, int pin_num)
2855 struct rockchip_pinctrl *info = bank->drvdata;
2862 ret = ctrl->slew_rate_calc_reg(bank, pin_num, &regmap, &reg, &bit);
2876 static int rockchip_set_slew_rate(struct rockchip_pin_bank *bank, int pin_num, int speed)
2878 struct rockchip_pinctrl *info = bank->drvdata;
2885 dev_dbg(info->dev, "setting slew rate of GPIO%d-%d to %d\n", bank->bank_num, pin_num, speed);
2887 ret = ctrl->slew_rate_calc_reg(bank, pin_num, &regmap, &reg, &bit);
2933 struct rockchip_pin_bank *bank;
2943 bank = pin_to_bank(info, pins[cnt]);
2944 ret = rockchip_set_mux(bank, pins[cnt] - bank->pin_base, data[cnt].func);
2953 rockchip_set_mux(bank, pins[cnt] - bank->pin_base, 0);
3002 struct rockchip_pin_bank *bank = pin_to_bank(info, pin);
3003 struct gpio_chip *gpio = &bank->gpio_chip;
3015 rc = rockchip_set_pull(bank, pin - bank->pin_base, param);
3032 rc = rockchip_set_pull(bank, pin - bank->pin_base, param);
3038 rc = rockchip_get_mux(bank, pin - bank->pin_base);
3044 rc = gpio->direction_output(gpio, pin - bank->pin_base, arg);
3055 rc = rockchip_set_drive_perpin(bank, pin - bank->pin_base, arg);
3065 rc = rockchip_set_schmitt(bank, pin - bank->pin_base, arg);
3075 rc = rockchip_set_slew_rate(bank, pin - bank->pin_base, arg);
3092 struct rockchip_pin_bank *bank = pin_to_bank(info, pin);
3093 struct gpio_chip *gpio = &bank->gpio_chip;
3100 if (rockchip_get_pull(bank, pin - bank->pin_base) != param) {
3114 if (rockchip_get_pull(bank, pin - bank->pin_base) != param) {
3121 rc = rockchip_get_mux(bank, pin - bank->pin_base);
3127 rc = gpio->get(gpio, pin - bank->pin_base);
3140 rc = rockchip_get_drive_perpin(bank, pin - bank->pin_base);
3152 rc = rockchip_get_schmitt(bank, pin - bank->pin_base);
3164 rc = rockchip_get_slew_rate(bank, pin - bank->pin_base);
3187 {.compatible = "rockchip,gpio-bank"},
3210 struct rockchip_pin_bank *bank;
3223 * the binding format is rockchip,pins = <bank pin mux CONFIG>,
3247 bank = bank_num_to_bank(info, num);
3248 if (IS_ERR(bank)) {
3249 return PTR_ERR(bank);
3252 grp->pins[j] = bank->pin_base + be32_to_cpu(*list++);
3356 int pin, bank, ret;
3374 for (bank = 0, k = 0; bank < info->ctrl->nr_banks; bank++) {
3375 pin_bank = &info->ctrl->pin_banks[bank];
3405 struct rockchip_pin_bank *bank;
3415 bank = ctrl->pin_banks;
3416 for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
3419 raw_spin_lock_init(&bank->slock);
3420 bank->drvdata = d;
3421 bank->pin_base = ctrl->nr_pins;
3422 ctrl->nr_pins += bank->nr_pins;
3426 struct rockchip_iomux *iom = &bank->iomux[j];
3427 struct rockchip_drv *drv = &bank->drv[j];
3430 if (bank_pins >= bank->nr_pins) {
3457 dev_dbg(d->dev, "bank %d, iomux %d has iom_offset 0x%x drv_offset 0x%x\n", i, j, iom->offset, drv->offset);
3490 /* calculate the per-bank recalced_mask */
3494 if (ctrl->iomux_recalced[j].num == bank->bank_num) {
3496 bank->recalced_mask |= BIT(pin);
3500 /* calculate the per-bank route_mask */
3504 if (ctrl->iomux_routes[j].bank_num == bank->bank_num) {
3506 bank->route_mask |= BIT(pin);