Lines Matching refs:iod
196 * @iod: iodelay device
208 static int ti_iodelay_pinconf_set(struct ti_iodelay_device *iod,
211 const struct ti_iodelay_reg_data *reg = iod->reg_data;
212 struct ti_iodelay_reg_values *ival = &iod->reg_init_conf_values;
213 struct device *dev = iod->dev;
266 r = regmap_update_bits(iod->regmap, cfg->offset, reg_mask, reg_val);
277 * @iod: iodelay device
283 static int ti_iodelay_pinconf_init_dev(struct ti_iodelay_device *iod)
285 const struct ti_iodelay_reg_data *reg = iod->reg_data;
286 struct device *dev = iod->dev;
287 struct ti_iodelay_reg_values *ival = &iod->reg_init_conf_values;
292 r = regmap_update_bits(iod->regmap, reg->reg_global_lock_offset,
298 r = regmap_read(iod->regmap, reg->reg_refclk_offset, &val);
304 r = regmap_read(iod->regmap, reg->reg_coarse_offset, &val);
325 dev_dbg(iod->dev, "coarse: ref=0x%04x delay=0x%04x cdpe=0x%08x\n",
328 r = regmap_read(iod->regmap, reg->reg_fine_offset, &val);
349 dev_dbg(iod->dev, "fine: ref=0x%04x delay=0x%04x fdpe=0x%08x\n",
357 * @iod: IODelay device
361 static void ti_iodelay_pinconf_deinit_dev(struct ti_iodelay_device *iod)
363 const struct ti_iodelay_reg_data *reg = iod->reg_data;
366 regmap_update_bits(iod->regmap, reg->reg_global_lock_offset,
372 * @iod: iodelay device
378 ti_iodelay_get_pingroup(struct ti_iodelay_device *iod, unsigned int selector)
382 g = pinctrl_generic_get_group(iod->pctl, selector);
384 dev_err(iod->dev, "%s could not find pingroup %i\n", __func__,
395 * @iod: iodelay driver instance
398 static int ti_iodelay_offset_to_pin(struct ti_iodelay_device *iod,
401 const struct ti_iodelay_reg_data *r = iod->reg_data;
405 dev_err(iod->dev, "mux offset out of range: 0x%x (0x%x)\n",
431 struct ti_iodelay_device *iod;
437 iod = pinctrl_dev_get_drvdata(pctldev);
438 if (!iod)
441 r = iod->reg_data;
444 dev_err(iod->dev, "invalid args_count for spec: %i\n",
455 pin = ti_iodelay_offset_to_pin(iod, cfg[pin_index].offset);
457 dev_err(iod->dev, "could not add functions for %pOFn %ux\n",
463 pd = &iod->pa[pin];
466 dev_dbg(iod->dev, "%pOFn offset=%x a_delay = %d g_delay = %d\n",
490 struct ti_iodelay_device *iod;
496 iod = pinctrl_dev_get_drvdata(pctldev);
497 if (!iod)
504 *map = devm_kzalloc(iod->dev, sizeof(**map), GFP_KERNEL);
509 g = devm_kzalloc(iod->dev, sizeof(*g), GFP_KERNEL);
515 pins = devm_kcalloc(iod->dev, rows, sizeof(*pins), GFP_KERNEL);
521 cfg = devm_kcalloc(iod->dev, rows, sizeof(*cfg), GFP_KERNEL);
545 error = pinctrl_generic_add_group(iod->pctl, np->name, pins, i, g);
558 devm_kfree(iod->dev, cfg);
560 devm_kfree(iod->dev, pins);
562 devm_kfree(iod->dev, g);
564 devm_kfree(iod->dev, *map);
581 struct ti_iodelay_device *iod;
584 iod = pinctrl_dev_get_drvdata(pctldev);
585 group = ti_iodelay_get_pingroup(iod, selector);
608 struct ti_iodelay_device *iod;
613 iod = pinctrl_dev_get_drvdata(pctldev);
614 dev = iod->dev;
615 group = ti_iodelay_get_pingroup(iod, selector);
629 if (ti_iodelay_pinconf_set(iod, &group->cfg[i]))
639 * @iod: iodelay driver instance
642 static unsigned int ti_iodelay_pin_to_offset(struct ti_iodelay_device *iod,
645 const struct ti_iodelay_reg_data *r = iod->reg_data;
659 struct ti_iodelay_device *iod;
666 iod = pinctrl_dev_get_drvdata(pctldev);
667 r = iod->reg_data;
669 offset = ti_iodelay_pin_to_offset(iod, pin);
670 pd = &iod->pa[pin];
673 regmap_read(iod->regmap, offset, &in);
674 regmap_read(iod->regmap, offset + r->regmap_config->reg_stride, &oen);
675 regmap_read(iod->regmap, offset + r->regmap_config->reg_stride * 2,
679 iod->phys_base + offset,
697 struct ti_iodelay_device *iod;
701 iod = pinctrl_dev_get_drvdata(pctldev);
702 group = ti_iodelay_get_pingroup(iod, selector);
711 regmap_read(iod->regmap, cfg->offset, ®);
739 * @iod: iodelay device
745 struct ti_iodelay_device *iod, u32 base_phy)
747 const struct ti_iodelay_reg_data *r = iod->reg_data;
752 nr_pins = ti_iodelay_offset_to_pin(iod, r->regmap_config->max_register);
755 iod->pa = devm_kcalloc(dev, nr_pins, sizeof(*iod->pa), GFP_KERNEL);
756 if (!iod->pa)
759 iod->desc.pins = iod->pa;
760 iod->desc.npins = nr_pins;
765 pin = &iod->pa[i];
827 struct ti_iodelay_device *iod;
843 iod = devm_kzalloc(dev, sizeof(*iod), GFP_KERNEL);
844 if (!iod) {
848 iod->dev = dev;
849 iod->reg_data = match->data;
852 iod->reg_base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
853 if (IS_ERR(iod->reg_base)) {
854 ret = PTR_ERR(iod->reg_base);
857 iod->phys_base = res->start;
859 iod->regmap = devm_regmap_init_mmio(dev, iod->reg_base,
860 iod->reg_data->regmap_config);
861 if (IS_ERR(iod->regmap)) {
863 ret = PTR_ERR(iod->regmap);
867 ret = ti_iodelay_pinconf_init_dev(iod);
871 ret = ti_iodelay_alloc_pins(dev, iod, res->start);
875 iod->desc.pctlops = &ti_iodelay_pinctrl_ops;
877 iod->desc.confops = &ti_iodelay_pinctrl_pinconf_ops;
878 iod->desc.name = dev_name(dev);
879 iod->desc.owner = THIS_MODULE;
881 ret = pinctrl_register_and_init(&iod->desc, dev, iod, &iod->pctl);
887 platform_set_drvdata(pdev, iod);
889 return pinctrl_enable(iod->pctl);
904 struct ti_iodelay_device *iod = platform_get_drvdata(pdev);
906 if (!iod)
909 if (iod->pctl)
910 pinctrl_unregister(iod->pctl);
912 ti_iodelay_pinconf_deinit_dev(iod);