Lines Matching +full:gpio +full:- +full:mux

1 // SPDX-License-Identifier: BSD-3-Clause
5 * Author: Wyon Bi <bivvy.bi@rock-chips.com>
10 static int rk628_calc_mux_offset(struct rk628 *rk628, int mux, int reg, int offset) in rk628_calc_mux_offset() argument
17 if (mux) in rk628_calc_mux_offset()
24 offset += offset - 4; in rk628_calc_mux_offset()
25 val = 0x3 << (offset + 16) | (mux << offset); in rk628_calc_mux_offset()
28 val = BIT(offset + 16) | (mux << offset); in rk628_calc_mux_offset()
30 val = BIT(offset + 16) | (mux << offset); in rk628_calc_mux_offset()
37 val = 0x3 << (offset + 16) | (mux << offset); in rk628_calc_mux_offset()
39 val = BIT(offset + 16) | (mux << offset); in rk628_calc_mux_offset()
42 val = BIT(offset + 16) | (mux << offset); in rk628_calc_mux_offset()
45 offset -= 16; in rk628_calc_mux_offset()
46 val = 0x3 << ((offset*2) + 16) | (mux << (offset*2)); in rk628_calc_mux_offset()
50 val = 0x3 << (offset + 16) | (mux << offset); in rk628_calc_mux_offset()
52 val = BIT(offset + 16) | (mux << offset); in rk628_calc_mux_offset()
61 int rk628_misc_pinctrl_set_mux(struct rk628 *rk628, int gpio, int mux) in rk628_misc_pinctrl_set_mux() argument
65 mux &= 0x3; in rk628_misc_pinctrl_set_mux()
68 if (rk628_pin_iomux_groups[i].pins == gpio) { in rk628_misc_pinctrl_set_mux()
76 pr_info("%s invalid gpio or iomux_base\n", __func__); in rk628_misc_pinctrl_set_mux()
77 return -1; in rk628_misc_pinctrl_set_mux()
80 val = rk628_calc_mux_offset(rk628, mux, iomux_base, offset); in rk628_misc_pinctrl_set_mux()
89 /* generic gpio chip */
90 int rk628_misc_gpio_get_value(struct rk628 *rk628, int gpio) in rk628_misc_gpio_get_value() argument
95 if (rk628_pin_iomux_groups[i].pins == gpio) { in rk628_misc_gpio_get_value()
103 pr_info("%s invalid gpio or data_reg\n", __func__); in rk628_misc_gpio_get_value()
104 return -1; in rk628_misc_gpio_get_value()
115 int rk628_misc_gpio_set_value(struct rk628 *rk628, int gpio, int value) in rk628_misc_gpio_set_value() argument
120 if (rk628_pin_iomux_groups[i].pins == gpio) { in rk628_misc_gpio_set_value()
124 offset -= 16; in rk628_misc_gpio_set_value()
133 pr_info("%s invalid gpio or data_reg\n", __func__); in rk628_misc_gpio_set_value()
134 return -1; in rk628_misc_gpio_set_value()
149 int rk628_misc_gpio_set_direction(struct rk628 *rk628, int gpio, int direction) in rk628_misc_gpio_set_direction() argument
154 if (rk628_pin_iomux_groups[i].pins == gpio) { in rk628_misc_gpio_set_direction()
158 offset -= 16; in rk628_misc_gpio_set_direction()
167 pr_info("%s invalid gpio or dir_reg\n", __func__); in rk628_misc_gpio_set_direction()
168 return -1; in rk628_misc_gpio_set_direction()
184 int i, iomux_base, offset, val, mux; in rk628_misc_iomux_init() local
187 mux = rk628_pin_iomux_groups[i].mux; in rk628_misc_iomux_init()
191 val = rk628_calc_mux_offset(rk628, mux, iomux_base, offset); in rk628_misc_iomux_init()
200 int rk628_misc_gpio_direction_input(struct rk628 *rk628, int gpio) in rk628_misc_gpio_direction_input() argument
202 rk628_misc_pinctrl_set_mux(rk628, gpio, GPIO_FUNC); in rk628_misc_gpio_direction_input()
204 rk628_misc_gpio_set_direction(rk628, gpio, GPIO_DIRECTION_IN); in rk628_misc_gpio_direction_input()
210 int rk628_misc_gpio_direction_output(struct rk628 *rk628, int gpio, int value) in rk628_misc_gpio_direction_output() argument
213 rk628_misc_pinctrl_set_mux(rk628, gpio, GPIO_FUNC); in rk628_misc_gpio_direction_output()
214 rk628_misc_gpio_set_value(rk628, gpio, value); in rk628_misc_gpio_direction_output()
215 rk628_misc_gpio_set_direction(rk628, gpio, GPIO_DIRECTION_OUT); in rk628_misc_gpio_direction_output()
220 int rk628_misc_gpio_set_pull_highz_up_down(struct rk628 *rk628, int gpio, int pull) in rk628_misc_gpio_set_pull_highz_up_down() argument
226 if (rk628_pin_iomux_groups[i].pins == gpio) { in rk628_misc_gpio_set_pull_highz_up_down()
235 pr_info("rk628_gpio_pull_highz_up_down invalid gpio or pull_reg\n"); in rk628_misc_gpio_set_pull_highz_up_down()
236 return -1; in rk628_misc_gpio_set_pull_highz_up_down()
242 return -1; in rk628_misc_gpio_set_pull_highz_up_down()
245 return -1; in rk628_misc_gpio_set_pull_highz_up_down()
252 return -1; in rk628_misc_gpio_set_pull_highz_up_down()
255 return -1; in rk628_misc_gpio_set_pull_highz_up_down()
273 return -1; in rk628_misc_gpio_set_pull_highz_up_down()
275 return -1; in rk628_misc_gpio_set_pull_highz_up_down()