Lines Matching +full:int +full:- +full:gpios

9  * SPDX-License-Identifier:	GPL-2.0+
42 return (1U << (31 - (gpio))); in gpio_mask()
47 return in_be32(&base->gpdat) & mask; in mpc85xx_gpio_get_val()
52 return in_be32(&base->gpdir) & mask; in mpc85xx_gpio_get_dir()
55 static inline void mpc85xx_gpio_set_in(struct ccsr_gpio *base, u32 gpios) in mpc85xx_gpio_set_in() argument
57 clrbits_be32(&base->gpdat, gpios); in mpc85xx_gpio_set_in()
58 /* GPDIR register 0 -> input */ in mpc85xx_gpio_set_in()
59 clrbits_be32(&base->gpdir, gpios); in mpc85xx_gpio_set_in()
62 static inline void mpc85xx_gpio_set_low(struct ccsr_gpio *base, u32 gpios) in mpc85xx_gpio_set_low() argument
64 clrbits_be32(&base->gpdat, gpios); in mpc85xx_gpio_set_low()
65 /* GPDIR register 1 -> output */ in mpc85xx_gpio_set_low()
66 setbits_be32(&base->gpdir, gpios); in mpc85xx_gpio_set_low()
69 static inline void mpc85xx_gpio_set_high(struct ccsr_gpio *base, u32 gpios) in mpc85xx_gpio_set_high() argument
71 setbits_be32(&base->gpdat, gpios); in mpc85xx_gpio_set_high()
72 /* GPDIR register 1 -> output */ in mpc85xx_gpio_set_high()
73 setbits_be32(&base->gpdir, gpios); in mpc85xx_gpio_set_high()
76 static inline int mpc85xx_gpio_open_drain_val(struct ccsr_gpio *base, u32 mask) in mpc85xx_gpio_open_drain_val()
78 return in_be32(&base->gpodr) & mask; in mpc85xx_gpio_open_drain_val()
82 gpios) in mpc85xx_gpio_open_drain_on() argument
84 /* GPODR register 1 -> open drain on */ in mpc85xx_gpio_open_drain_on()
85 setbits_be32(&base->gpodr, gpios); in mpc85xx_gpio_open_drain_on()
89 u32 gpios) in mpc85xx_gpio_open_drain_off() argument
91 /* GPODR register 0 -> open drain off (actively driven) */ in mpc85xx_gpio_open_drain_off()
92 clrbits_be32(&base->gpodr, gpios); in mpc85xx_gpio_open_drain_off()
95 static int mpc85xx_gpio_direction_input(struct udevice *dev, unsigned gpio) in mpc85xx_gpio_direction_input()
99 mpc85xx_gpio_set_in(data->base, gpio_mask(gpio)); in mpc85xx_gpio_direction_input()
103 static int mpc85xx_gpio_set_value(struct udevice *dev, unsigned gpio, in mpc85xx_gpio_set_value()
104 int value) in mpc85xx_gpio_set_value()
109 data->dat_shadow |= gpio_mask(gpio); in mpc85xx_gpio_set_value()
110 mpc85xx_gpio_set_high(data->base, gpio_mask(gpio)); in mpc85xx_gpio_set_value()
112 data->dat_shadow &= ~gpio_mask(gpio); in mpc85xx_gpio_set_value()
113 mpc85xx_gpio_set_low(data->base, gpio_mask(gpio)); in mpc85xx_gpio_set_value()
118 static int mpc85xx_gpio_direction_output(struct udevice *dev, unsigned gpio, in mpc85xx_gpio_direction_output()
119 int value) in mpc85xx_gpio_direction_output()
124 static int mpc85xx_gpio_get_value(struct udevice *dev, unsigned gpio) in mpc85xx_gpio_get_value()
128 if (!!mpc85xx_gpio_get_dir(data->base, gpio_mask(gpio))) { in mpc85xx_gpio_get_value()
129 /* Output -> use shadowed value */ in mpc85xx_gpio_get_value()
130 return !!(data->dat_shadow & gpio_mask(gpio)); in mpc85xx_gpio_get_value()
132 /* Input -> read value from GPDAT register */ in mpc85xx_gpio_get_value()
133 return !!mpc85xx_gpio_get_val(data->base, gpio_mask(gpio)); in mpc85xx_gpio_get_value()
137 static int mpc85xx_gpio_get_open_drain(struct udevice *dev, unsigned gpio) in mpc85xx_gpio_get_open_drain()
141 return !!mpc85xx_gpio_open_drain_val(data->base, gpio_mask(gpio)); in mpc85xx_gpio_get_open_drain()
144 static int mpc85xx_gpio_set_open_drain(struct udevice *dev, unsigned gpio, in mpc85xx_gpio_set_open_drain()
145 int value) in mpc85xx_gpio_set_open_drain()
150 mpc85xx_gpio_open_drain_on(data->base, gpio_mask(gpio)); in mpc85xx_gpio_set_open_drain()
152 mpc85xx_gpio_open_drain_off(data->base, gpio_mask(gpio)); in mpc85xx_gpio_set_open_drain()
157 static int mpc85xx_gpio_get_function(struct udevice *dev, unsigned gpio) in mpc85xx_gpio_get_function()
160 int dir; in mpc85xx_gpio_get_function()
162 dir = !!mpc85xx_gpio_get_dir(data->base, gpio_mask(gpio)); in mpc85xx_gpio_get_function()
167 static int mpc85xx_gpio_ofdata_to_platdata(struct udevice *dev) { in mpc85xx_gpio_ofdata_to_platdata()
172 addr = fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, in mpc85xx_gpio_ofdata_to_platdata()
175 plat->addr = addr; in mpc85xx_gpio_ofdata_to_platdata()
176 plat->size = size; in mpc85xx_gpio_ofdata_to_platdata()
177 plat->ngpios = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), in mpc85xx_gpio_ofdata_to_platdata()
184 static int mpc85xx_gpio_platdata_to_priv(struct udevice *dev) in mpc85xx_gpio_platdata_to_priv()
188 unsigned long size = plat->size; in mpc85xx_gpio_platdata_to_priv()
193 priv->addr = plat->addr; in mpc85xx_gpio_platdata_to_priv()
194 priv->base = map_sysmem(CONFIG_SYS_IMMR + plat->addr, size); in mpc85xx_gpio_platdata_to_priv()
196 if (!priv->base) in mpc85xx_gpio_platdata_to_priv()
197 return -ENOMEM; in mpc85xx_gpio_platdata_to_priv()
199 priv->gpio_count = plat->ngpios; in mpc85xx_gpio_platdata_to_priv()
200 priv->dat_shadow = 0; in mpc85xx_gpio_platdata_to_priv()
205 static int mpc85xx_gpio_probe(struct udevice *dev) in mpc85xx_gpio_probe()
213 snprintf(name, sizeof(name), "MPC@%lx_", data->addr); in mpc85xx_gpio_probe()
217 return -ENOMEM; in mpc85xx_gpio_probe()
219 uc_priv->bank_name = str; in mpc85xx_gpio_probe()
220 uc_priv->gpio_count = data->gpio_count; in mpc85xx_gpio_probe()
236 { .compatible = "fsl,pq3-gpio" },