Lines Matching refs:data
35 static inline void wmt_setbits(struct wmt_pinctrl_data *data, u32 reg, in wmt_setbits() argument
40 val = readl_relaxed(data->base + reg); in wmt_setbits()
42 writel_relaxed(val, data->base + reg); in wmt_setbits()
45 static inline void wmt_clearbits(struct wmt_pinctrl_data *data, u32 reg, in wmt_clearbits() argument
50 val = readl_relaxed(data->base + reg); in wmt_clearbits()
52 writel_relaxed(val, data->base + reg); in wmt_clearbits()
84 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_pmx_get_function_groups() local
87 *groups = data->groups; in wmt_pmx_get_function_groups()
88 *num_groups = data->ngroups; in wmt_pmx_get_function_groups()
93 static int wmt_set_pinmux(struct wmt_pinctrl_data *data, unsigned func, in wmt_set_pinmux() argument
98 u32 reg_en = data->banks[bank].reg_en; in wmt_set_pinmux()
99 u32 reg_dir = data->banks[bank].reg_dir; in wmt_set_pinmux()
102 dev_err(data->dev, "pin:%d no direction register defined\n", in wmt_set_pinmux()
114 wmt_setbits(data, reg_en, BIT(bit)); in wmt_set_pinmux()
115 wmt_clearbits(data, reg_dir, BIT(bit)); in wmt_set_pinmux()
119 wmt_setbits(data, reg_en, BIT(bit)); in wmt_set_pinmux()
120 wmt_setbits(data, reg_dir, BIT(bit)); in wmt_set_pinmux()
124 dev_err(data->dev, "pin:%d no alt function available\n", in wmt_set_pinmux()
128 wmt_clearbits(data, reg_en, BIT(bit)); in wmt_set_pinmux()
138 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_pmx_set_mux() local
139 u32 pinnum = data->pins[group_selector].number; in wmt_pmx_set_mux()
141 return wmt_set_pinmux(data, func_selector, pinnum); in wmt_pmx_set_mux()
148 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_pmx_gpio_disable_free() local
151 wmt_set_pinmux(data, WMT_FSEL_GPIO_IN, offset); in wmt_pmx_gpio_disable_free()
159 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_pmx_gpio_set_direction() local
161 wmt_set_pinmux(data, (input ? WMT_FSEL_GPIO_IN : WMT_FSEL_GPIO_OUT), in wmt_pmx_gpio_set_direction()
178 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_get_groups_count() local
180 return data->ngroups; in wmt_get_groups_count()
186 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_get_group_name() local
188 return data->groups[selector]; in wmt_get_group_name()
196 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_get_group_pins() local
198 *pins = &data->pins[selector].number; in wmt_get_group_pins()
204 static int wmt_pctl_find_group_by_pin(struct wmt_pinctrl_data *data, u32 pin) in wmt_pctl_find_group_by_pin() argument
208 for (i = 0; i < data->npins; i++) { in wmt_pctl_find_group_by_pin()
209 if (data->pins[i].number == pin) in wmt_pctl_find_group_by_pin()
216 static int wmt_pctl_dt_node_to_map_func(struct wmt_pinctrl_data *data, in wmt_pctl_dt_node_to_map_func() argument
225 dev_err(data->dev, "invalid wm,function %d\n", fnum); in wmt_pctl_dt_node_to_map_func()
229 group = wmt_pctl_find_group_by_pin(data, pin); in wmt_pctl_dt_node_to_map_func()
231 dev_err(data->dev, "unable to match pin %d to group\n", pin); in wmt_pctl_dt_node_to_map_func()
236 map->data.mux.group = data->groups[group]; in wmt_pctl_dt_node_to_map_func()
237 map->data.mux.function = wmt_functions[fnum]; in wmt_pctl_dt_node_to_map_func()
243 static int wmt_pctl_dt_node_to_map_pull(struct wmt_pinctrl_data *data, in wmt_pctl_dt_node_to_map_pull() argument
253 dev_err(data->dev, "invalid wm,pull %d\n", pull); in wmt_pctl_dt_node_to_map_pull()
257 group = wmt_pctl_find_group_by_pin(data, pin); in wmt_pctl_dt_node_to_map_pull()
259 dev_err(data->dev, "unable to match pin %d to group\n", pin); in wmt_pctl_dt_node_to_map_pull()
279 dev_err(data->dev, "invalid pull state %d - disabling\n", pull); in wmt_pctl_dt_node_to_map_pull()
283 map->data.configs.group_or_pin = data->groups[group]; in wmt_pctl_dt_node_to_map_pull()
284 map->data.configs.configs = configs; in wmt_pctl_dt_node_to_map_pull()
285 map->data.configs.num_configs = 1; in wmt_pctl_dt_node_to_map_pull()
299 kfree(maps[i].data.configs.configs); in wmt_pctl_dt_free_map()
314 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_pctl_dt_node_to_map() local
318 dev_err(data->dev, "missing wmt,pins property\n"); in wmt_pctl_dt_node_to_map()
326 dev_err(data->dev, "neither wm,function nor wm,pull specified\n"); in wmt_pctl_dt_node_to_map()
339 dev_err(data->dev, "wm,function must have 1 or %d entries\n", in wmt_pctl_dt_node_to_map()
345 dev_err(data->dev, "wm,pull must have 1 or %d entries\n", in wmt_pctl_dt_node_to_map()
366 if (pin >= (data->nbanks * 32)) { in wmt_pctl_dt_node_to_map()
367 dev_err(data->dev, "invalid wm,pins value\n"); in wmt_pctl_dt_node_to_map()
378 err = wmt_pctl_dt_node_to_map_func(data, np, pin, func, in wmt_pctl_dt_node_to_map()
390 err = wmt_pctl_dt_node_to_map_pull(data, np, pin, pull, in wmt_pctl_dt_node_to_map()
430 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev); in wmt_pinconf_set() local
435 u32 reg_pull_en = data->banks[bank].reg_pull_en; in wmt_pinconf_set()
436 u32 reg_pull_cfg = data->banks[bank].reg_pull_cfg; in wmt_pinconf_set()
440 dev_err(data->dev, "bias functions not supported on pin %d\n", in wmt_pinconf_set()
457 wmt_clearbits(data, reg_pull_en, BIT(bit)); in wmt_pinconf_set()
460 wmt_clearbits(data, reg_pull_cfg, BIT(bit)); in wmt_pinconf_set()
461 wmt_setbits(data, reg_pull_en, BIT(bit)); in wmt_pinconf_set()
464 wmt_setbits(data, reg_pull_cfg, BIT(bit)); in wmt_pinconf_set()
465 wmt_setbits(data, reg_pull_en, BIT(bit)); in wmt_pinconf_set()
468 dev_err(data->dev, "unknown pinconf param\n"); in wmt_pinconf_set()
501 struct wmt_pinctrl_data *data = dev_get_drvdata(chip->dev); in wmt_gpio_get_direction() local
504 u32 reg_dir = data->banks[bank].reg_dir; in wmt_gpio_get_direction()
507 val = readl_relaxed(data->base + reg_dir); in wmt_gpio_get_direction()
516 struct wmt_pinctrl_data *data = dev_get_drvdata(chip->dev); in wmt_gpio_get_value() local
519 u32 reg_data_in = data->banks[bank].reg_data_in; in wmt_gpio_get_value()
522 dev_err(data->dev, "no data in register defined\n"); in wmt_gpio_get_value()
526 return !!(readl_relaxed(data->base + reg_data_in) & BIT(bit)); in wmt_gpio_get_value()
532 struct wmt_pinctrl_data *data = dev_get_drvdata(chip->dev); in wmt_gpio_set_value() local
535 u32 reg_data_out = data->banks[bank].reg_data_out; in wmt_gpio_set_value()
538 dev_err(data->dev, "no data out register defined\n"); in wmt_gpio_set_value()
543 wmt_setbits(data, reg_data_out, BIT(bit)); in wmt_gpio_set_value()
545 wmt_clearbits(data, reg_data_out, BIT(bit)); in wmt_gpio_set_value()
574 struct wmt_pinctrl_data *data) in wmt_pinctrl_probe() argument
580 data->base = devm_ioremap_resource(&pdev->dev, res); in wmt_pinctrl_probe()
581 if (IS_ERR(data->base)) in wmt_pinctrl_probe()
582 return PTR_ERR(data->base); in wmt_pinctrl_probe()
584 wmt_desc.pins = data->pins; in wmt_pinctrl_probe()
585 wmt_desc.npins = data->npins; in wmt_pinctrl_probe()
587 data->gpio_chip = wmt_gpio_chip; in wmt_pinctrl_probe()
588 data->gpio_chip.dev = &pdev->dev; in wmt_pinctrl_probe()
589 data->gpio_chip.of_node = pdev->dev.of_node; in wmt_pinctrl_probe()
590 data->gpio_chip.ngpio = data->nbanks * 32; in wmt_pinctrl_probe()
592 platform_set_drvdata(pdev, data); in wmt_pinctrl_probe()
594 data->dev = &pdev->dev; in wmt_pinctrl_probe()
596 data->pctl_dev = pinctrl_register(&wmt_desc, &pdev->dev, data); in wmt_pinctrl_probe()
597 if (!data->pctl_dev) { in wmt_pinctrl_probe()
602 err = gpiochip_add(&data->gpio_chip); in wmt_pinctrl_probe()
608 err = gpiochip_add_pin_range(&data->gpio_chip, dev_name(data->dev), in wmt_pinctrl_probe()
609 0, 0, data->nbanks * 32); in wmt_pinctrl_probe()
618 gpiochip_remove(&data->gpio_chip); in wmt_pinctrl_probe()
620 pinctrl_unregister(data->pctl_dev); in wmt_pinctrl_probe()
626 struct wmt_pinctrl_data *data = platform_get_drvdata(pdev); in wmt_pinctrl_remove() local
628 gpiochip_remove(&data->gpio_chip); in wmt_pinctrl_remove()
629 pinctrl_unregister(data->pctl_dev); in wmt_pinctrl_remove()