Lines Matching refs:data

26 static inline void wmt_setbits(struct wmt_pinctrl_data *data, u32 reg,
31 val = readl_relaxed(data->base + reg);
33 writel_relaxed(val, data->base + reg);
36 static inline void wmt_clearbits(struct wmt_pinctrl_data *data, u32 reg,
41 val = readl_relaxed(data->base + reg);
43 writel_relaxed(val, data->base + reg);
75 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
78 *groups = data->groups;
79 *num_groups = data->ngroups;
84 static int wmt_set_pinmux(struct wmt_pinctrl_data *data, unsigned func,
89 u32 reg_en = data->banks[bank].reg_en;
90 u32 reg_dir = data->banks[bank].reg_dir;
93 dev_err(data->dev, "pin:%d no direction register defined\n",
105 wmt_setbits(data, reg_en, BIT(bit));
106 wmt_clearbits(data, reg_dir, BIT(bit));
110 wmt_setbits(data, reg_en, BIT(bit));
111 wmt_setbits(data, reg_dir, BIT(bit));
115 dev_err(data->dev, "pin:%d no alt function available\n",
119 wmt_clearbits(data, reg_en, BIT(bit));
129 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
130 u32 pinnum = data->pins[group_selector].number;
132 return wmt_set_pinmux(data, func_selector, pinnum);
139 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
142 wmt_set_pinmux(data, WMT_FSEL_GPIO_IN, offset);
150 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
152 wmt_set_pinmux(data, (input ? WMT_FSEL_GPIO_IN : WMT_FSEL_GPIO_OUT),
169 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
171 return data->ngroups;
177 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
179 return data->groups[selector];
187 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
189 *pins = &data->pins[selector].number;
195 static int wmt_pctl_find_group_by_pin(struct wmt_pinctrl_data *data, u32 pin)
199 for (i = 0; i < data->npins; i++) {
200 if (data->pins[i].number == pin)
207 static int wmt_pctl_dt_node_to_map_func(struct wmt_pinctrl_data *data,
216 dev_err(data->dev, "invalid wm,function %d\n", fnum);
220 group = wmt_pctl_find_group_by_pin(data, pin);
222 dev_err(data->dev, "unable to match pin %d to group\n", pin);
227 map->data.mux.group = data->groups[group];
228 map->data.mux.function = wmt_functions[fnum];
234 static int wmt_pctl_dt_node_to_map_pull(struct wmt_pinctrl_data *data,
244 dev_err(data->dev, "invalid wm,pull %d\n", pull);
248 group = wmt_pctl_find_group_by_pin(data, pin);
250 dev_err(data->dev, "unable to match pin %d to group\n", pin);
270 dev_err(data->dev, "invalid pull state %d - disabling\n", pull);
274 map->data.configs.group_or_pin = data->groups[group];
275 map->data.configs.configs = configs;
276 map->data.configs.num_configs = 1;
290 kfree(maps[i].data.configs.configs);
305 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
309 dev_err(data->dev, "missing wmt,pins property\n");
317 dev_err(data->dev, "neither wm,function nor wm,pull specified\n");
330 dev_err(data->dev, "wm,function must have 1 or %d entries\n",
336 dev_err(data->dev, "wm,pull must have 1 or %d entries\n",
357 if (pin >= (data->nbanks * 32)) {
358 dev_err(data->dev, "invalid wm,pins value\n");
369 err = wmt_pctl_dt_node_to_map_func(data, np, pin, func,
381 err = wmt_pctl_dt_node_to_map_pull(data, np, pin, pull,
421 struct wmt_pinctrl_data *data = pinctrl_dev_get_drvdata(pctldev);
426 u32 reg_pull_en = data->banks[bank].reg_pull_en;
427 u32 reg_pull_cfg = data->banks[bank].reg_pull_cfg;
431 dev_err(data->dev, "bias functions not supported on pin %d\n",
448 wmt_clearbits(data, reg_pull_en, BIT(bit));
451 wmt_clearbits(data, reg_pull_cfg, BIT(bit));
452 wmt_setbits(data, reg_pull_en, BIT(bit));
455 wmt_setbits(data, reg_pull_cfg, BIT(bit));
456 wmt_setbits(data, reg_pull_en, BIT(bit));
459 dev_err(data->dev, "unknown pinconf param\n");
482 struct wmt_pinctrl_data *data = gpiochip_get_data(chip);
485 u32 reg_dir = data->banks[bank].reg_dir;
488 val = readl_relaxed(data->base + reg_dir);
497 struct wmt_pinctrl_data *data = gpiochip_get_data(chip);
500 u32 reg_data_in = data->banks[bank].reg_data_in;
503 dev_err(data->dev, "no data in register defined\n");
507 return !!(readl_relaxed(data->base + reg_data_in) & BIT(bit));
513 struct wmt_pinctrl_data *data = gpiochip_get_data(chip);
516 u32 reg_data_out = data->banks[bank].reg_data_out;
519 dev_err(data->dev, "no data out register defined\n");
524 wmt_setbits(data, reg_data_out, BIT(bit));
526 wmt_clearbits(data, reg_data_out, BIT(bit));
555 struct wmt_pinctrl_data *data)
559 data->base = devm_platform_ioremap_resource(pdev, 0);
560 if (IS_ERR(data->base))
561 return PTR_ERR(data->base);
563 wmt_desc.pins = data->pins;
564 wmt_desc.npins = data->npins;
566 data->gpio_chip = wmt_gpio_chip;
567 data->gpio_chip.parent = &pdev->dev;
568 data->gpio_chip.ngpio = data->nbanks * 32;
570 platform_set_drvdata(pdev, data);
572 data->dev = &pdev->dev;
574 data->pctl_dev = devm_pinctrl_register(&pdev->dev, &wmt_desc, data);
575 if (IS_ERR(data->pctl_dev)) {
577 return PTR_ERR(data->pctl_dev);
580 err = gpiochip_add_data(&data->gpio_chip, data);
586 err = gpiochip_add_pin_range(&data->gpio_chip, dev_name(data->dev),
587 0, 0, data->nbanks * 32);
596 gpiochip_remove(&data->gpio_chip);