Lines Matching full:pctrl
42 const struct sophgo_pin *sophgo_get_pin(struct sophgo_pinctrl *pctrl, in sophgo_get_pin() argument
45 return bsearch((void *)pin_id, pctrl->data->pindata, pctrl->data->npins, in sophgo_get_pin()
46 pctrl->data->pinsize, sophgo_cmp_pin); in sophgo_get_pin()
49 static int sophgo_verify_pinmux_config(struct sophgo_pinctrl *pctrl, in sophgo_verify_pinmux_config() argument
52 if (pctrl->data->cfg_ops->verify_pinmux_config) in sophgo_verify_pinmux_config()
53 return pctrl->data->cfg_ops->verify_pinmux_config(config); in sophgo_verify_pinmux_config()
57 static int sophgo_verify_pin_group(struct sophgo_pinctrl *pctrl, in sophgo_verify_pin_group() argument
61 if (pctrl->data->cfg_ops->verify_pin_group) in sophgo_verify_pin_group()
62 return pctrl->data->cfg_ops->verify_pin_group(config, npins); in sophgo_verify_pin_group()
67 struct sophgo_pinctrl *pctrl, in sophgo_dt_node_to_map_post() argument
71 if (pctrl->data->cfg_ops->dt_node_to_map_post) in sophgo_dt_node_to_map_post()
72 return pctrl->data->cfg_ops->dt_node_to_map_post(cur, pctrl, in sophgo_dt_node_to_map_post()
80 struct sophgo_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in sophgo_pctrl_dt_node_to_map() local
81 struct device *dev = pctrl->dev; in sophgo_pctrl_dt_node_to_map()
102 guard(mutex)(&pctrl->mutex); in sophgo_pctrl_dt_node_to_map()
146 pinmuxs[i].pin = sophgo_get_pin(pctrl, pins[i]); in sophgo_pctrl_dt_node_to_map()
154 ret = sophgo_verify_pinmux_config(pctrl, &pinmuxs[i]); in sophgo_pctrl_dt_node_to_map()
162 ret = sophgo_verify_pin_group(pctrl, pinmuxs, npins); in sophgo_pctrl_dt_node_to_map()
168 ret = sophgo_dt_node_to_map_post(child, pctrl, pinmuxs, npins); in sophgo_pctrl_dt_node_to_map()
224 struct sophgo_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in sophgo_pmx_set_mux() local
239 guard(raw_spinlock_irqsave)(&pctrl->lock); in sophgo_pmx_set_mux()
241 pctrl->data->cfg_ops->set_pinmux_config(pctrl, pin, value); in sophgo_pmx_set_mux()
247 static int sophgo_pin_set_config(struct sophgo_pinctrl *pctrl, in sophgo_pin_set_config() argument
251 const struct sophgo_pin *pin = sophgo_get_pin(pctrl, pin_id); in sophgo_pin_set_config()
256 guard(raw_spinlock_irqsave)(&pctrl->lock); in sophgo_pin_set_config()
258 return pctrl->data->cfg_ops->set_pinconf_config(pctrl, pin, value, mask); in sophgo_pin_set_config()
264 struct sophgo_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in sophgo_pconf_set() local
265 const struct sophgo_pin *pin = sophgo_get_pin(pctrl, pin_id); in sophgo_pconf_set()
271 if (pctrl->data->cfg_ops->compute_pinconf_config(pctrl, pin, in sophgo_pconf_set()
276 return sophgo_pin_set_config(pctrl, pin_id, value, mask); in sophgo_pconf_set()
282 struct sophgo_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in sophgo_pconf_group_set() local
294 if (pctrl->data->cfg_ops->compute_pinconf_config(pctrl, pinmuxs[0].pin, in sophgo_pconf_group_set()
300 sophgo_pin_set_config(pctrl, group->grp.pins[i], value, mask); in sophgo_pconf_group_set()
305 u32 sophgo_pinctrl_typical_pull_down(struct sophgo_pinctrl *pctrl, in sophgo_pinctrl_typical_pull_down() argument
309 return pctrl->data->vddio_ops->get_pull_down(pin, power_cfg); in sophgo_pinctrl_typical_pull_down()
312 u32 sophgo_pinctrl_typical_pull_up(struct sophgo_pinctrl *pctrl, in sophgo_pinctrl_typical_pull_up() argument
316 return pctrl->data->vddio_ops->get_pull_up(pin, power_cfg); in sophgo_pinctrl_typical_pull_up()
319 int sophgo_pinctrl_oc2reg(struct sophgo_pinctrl *pctrl, in sophgo_pinctrl_oc2reg() argument
326 if (!pctrl->data->vddio_ops->get_oc_map) in sophgo_pinctrl_oc2reg()
329 len = pctrl->data->vddio_ops->get_oc_map(pin, power_cfg, &map); in sophgo_pinctrl_oc2reg()
341 int sophgo_pinctrl_reg2oc(struct sophgo_pinctrl *pctrl, in sophgo_pinctrl_reg2oc() argument
348 if (!pctrl->data->vddio_ops->get_oc_map) in sophgo_pinctrl_reg2oc()
351 len = pctrl->data->vddio_ops->get_oc_map(pin, power_cfg, &map); in sophgo_pinctrl_reg2oc()
361 int sophgo_pinctrl_schmitt2reg(struct sophgo_pinctrl *pctrl, in sophgo_pinctrl_schmitt2reg() argument
368 if (!pctrl->data->vddio_ops->get_schmitt_map) in sophgo_pinctrl_schmitt2reg()
371 len = pctrl->data->vddio_ops->get_schmitt_map(pin, power_cfg, &map); in sophgo_pinctrl_schmitt2reg()
383 int sophgo_pinctrl_reg2schmitt(struct sophgo_pinctrl *pctrl, in sophgo_pinctrl_reg2schmitt() argument
390 if (!pctrl->data->vddio_ops->get_schmitt_map) in sophgo_pinctrl_reg2schmitt()
393 len = pctrl->data->vddio_ops->get_schmitt_map(pin, power_cfg, &map); in sophgo_pinctrl_reg2schmitt()
406 struct sophgo_pinctrl *pctrl; in sophgo_pinctrl_probe() local
417 pctrl = devm_kzalloc(dev, sizeof(*pctrl), GFP_KERNEL); in sophgo_pinctrl_probe()
418 if (!pctrl) in sophgo_pinctrl_probe()
421 pctrl->pdesc.name = dev_name(dev); in sophgo_pinctrl_probe()
422 pctrl->pdesc.pins = pctrl_data->pins; in sophgo_pinctrl_probe()
423 pctrl->pdesc.npins = pctrl_data->npins; in sophgo_pinctrl_probe()
424 pctrl->pdesc.pctlops = pctrl_data->pctl_ops; in sophgo_pinctrl_probe()
425 pctrl->pdesc.pmxops = pctrl_data->pmx_ops; in sophgo_pinctrl_probe()
426 pctrl->pdesc.confops = pctrl_data->pconf_ops; in sophgo_pinctrl_probe()
427 pctrl->pdesc.owner = THIS_MODULE; in sophgo_pinctrl_probe()
429 pctrl->data = pctrl_data; in sophgo_pinctrl_probe()
430 pctrl->dev = dev; in sophgo_pinctrl_probe()
431 raw_spin_lock_init(&pctrl->lock); in sophgo_pinctrl_probe()
432 mutex_init(&pctrl->mutex); in sophgo_pinctrl_probe()
434 ret = pctrl->data->cfg_ops->pctrl_init(pdev, pctrl); in sophgo_pinctrl_probe()
438 platform_set_drvdata(pdev, pctrl); in sophgo_pinctrl_probe()
440 ret = devm_pinctrl_register_and_init(dev, &pctrl->pdesc, in sophgo_pinctrl_probe()
441 pctrl, &pctrl->pctrl_dev); in sophgo_pinctrl_probe()
446 return pinctrl_enable(pctrl->pctrl_dev); in sophgo_pinctrl_probe()