Lines Matching refs:iod
194 * @iod: iodelay device
206 static int ti_iodelay_pinconf_set(struct ti_iodelay_device *iod,
209 const struct ti_iodelay_reg_data *reg = iod->reg_data;
210 struct ti_iodelay_reg_values *ival = &iod->reg_init_conf_values;
211 struct device *dev = iod->dev;
264 r = regmap_update_bits(iod->regmap, cfg->offset, reg_mask, reg_val);
275 * @iod: iodelay device
281 static int ti_iodelay_pinconf_init_dev(struct ti_iodelay_device *iod)
283 const struct ti_iodelay_reg_data *reg = iod->reg_data;
284 struct device *dev = iod->dev;
285 struct ti_iodelay_reg_values *ival = &iod->reg_init_conf_values;
290 r = regmap_update_bits(iod->regmap, reg->reg_global_lock_offset,
296 r = regmap_read(iod->regmap, reg->reg_refclk_offset, &val);
302 r = regmap_read(iod->regmap, reg->reg_coarse_offset, &val);
323 dev_dbg(iod->dev, "coarse: ref=0x%04x delay=0x%04x cdpe=0x%08x\n",
326 r = regmap_read(iod->regmap, reg->reg_fine_offset, &val);
347 dev_dbg(iod->dev, "fine: ref=0x%04x delay=0x%04x fdpe=0x%08x\n",
355 * @iod: IODelay device
359 static void ti_iodelay_pinconf_deinit_dev(struct ti_iodelay_device *iod)
361 const struct ti_iodelay_reg_data *reg = iod->reg_data;
364 regmap_update_bits(iod->regmap, reg->reg_global_lock_offset,
370 * @iod: iodelay device
376 ti_iodelay_get_pingroup(struct ti_iodelay_device *iod, unsigned int selector)
380 g = pinctrl_generic_get_group(iod->pctl, selector);
382 dev_err(iod->dev, "%s could not find pingroup %i\n", __func__,
393 * @iod: iodelay driver instance
396 static int ti_iodelay_offset_to_pin(struct ti_iodelay_device *iod,
399 const struct ti_iodelay_reg_data *r = iod->reg_data;
403 dev_err(iod->dev, "mux offset out of range: 0x%x (0x%x)\n",
429 struct ti_iodelay_device *iod;
435 iod = pinctrl_dev_get_drvdata(pctldev);
436 if (!iod)
439 r = iod->reg_data;
442 dev_err(iod->dev, "invalid args_count for spec: %i\n",
453 pin = ti_iodelay_offset_to_pin(iod, cfg[pin_index].offset);
455 dev_err(iod->dev, "could not add functions for %pOFn %ux\n",
461 pd = &iod->pa[pin];
464 dev_dbg(iod->dev, "%pOFn offset=%x a_delay = %d g_delay = %d\n",
488 struct ti_iodelay_device *iod;
494 iod = pinctrl_dev_get_drvdata(pctldev);
495 if (!iod)
502 *map = devm_kzalloc(iod->dev, sizeof(**map), GFP_KERNEL);
507 g = devm_kzalloc(iod->dev, sizeof(*g), GFP_KERNEL);
513 pins = devm_kcalloc(iod->dev, rows, sizeof(*pins), GFP_KERNEL);
517 cfg = devm_kcalloc(iod->dev, rows, sizeof(*cfg), GFP_KERNEL);
541 error = pinctrl_generic_add_group(iod->pctl, np->name, pins, i, g);
554 devm_kfree(iod->dev, cfg);
556 devm_kfree(iod->dev, pins);
558 devm_kfree(iod->dev, g);
560 devm_kfree(iod->dev, *map);
577 struct ti_iodelay_device *iod;
580 iod = pinctrl_dev_get_drvdata(pctldev);
581 group = ti_iodelay_get_pingroup(iod, selector);
604 struct ti_iodelay_device *iod;
609 iod = pinctrl_dev_get_drvdata(pctldev);
610 dev = iod->dev;
611 group = ti_iodelay_get_pingroup(iod, selector);
625 if (ti_iodelay_pinconf_set(iod, &group->cfg[i]))
635 * @iod: iodelay driver instance
638 static unsigned int ti_iodelay_pin_to_offset(struct ti_iodelay_device *iod,
641 const struct ti_iodelay_reg_data *r = iod->reg_data;
655 struct ti_iodelay_device *iod;
662 iod = pinctrl_dev_get_drvdata(pctldev);
663 r = iod->reg_data;
665 offset = ti_iodelay_pin_to_offset(iod, pin);
666 pd = &iod->pa[pin];
669 regmap_read(iod->regmap, offset, &in);
670 regmap_read(iod->regmap, offset + r->regmap_config->reg_stride, &oen);
671 regmap_read(iod->regmap, offset + r->regmap_config->reg_stride * 2,
675 iod->phys_base + offset,
693 struct ti_iodelay_device *iod;
697 iod = pinctrl_dev_get_drvdata(pctldev);
698 group = ti_iodelay_get_pingroup(iod, selector);
707 regmap_read(iod->regmap, cfg->offset, ®),
736 * @iod: iodelay device
742 struct ti_iodelay_device *iod, u32 base_phy)
744 const struct ti_iodelay_reg_data *r = iod->reg_data;
749 nr_pins = ti_iodelay_offset_to_pin(iod, r->regmap_config->max_register);
752 iod->pa = devm_kcalloc(dev, nr_pins, sizeof(*iod->pa), GFP_KERNEL);
753 if (!iod->pa)
756 iod->desc.pins = iod->pa;
757 iod->desc.npins = nr_pins;
762 pin = &iod->pa[i];
824 struct ti_iodelay_device *iod;
840 iod = devm_kzalloc(dev, sizeof(*iod), GFP_KERNEL);
841 if (!iod) {
845 iod->dev = dev;
846 iod->reg_data = match->data;
856 iod->phys_base = res->start;
857 iod->reg_base = devm_ioremap_resource(dev, res);
858 if (IS_ERR(iod->reg_base)) {
859 ret = PTR_ERR(iod->reg_base);
863 iod->regmap = devm_regmap_init_mmio(dev, iod->reg_base,
864 iod->reg_data->regmap_config);
865 if (IS_ERR(iod->regmap)) {
867 ret = PTR_ERR(iod->regmap);
871 if (ti_iodelay_pinconf_init_dev(iod))
874 ret = ti_iodelay_alloc_pins(dev, iod, res->start);
878 iod->desc.pctlops = &ti_iodelay_pinctrl_ops;
880 iod->desc.confops = &ti_iodelay_pinctrl_pinconf_ops;
881 iod->desc.name = dev_name(dev);
882 iod->desc.owner = THIS_MODULE;
884 ret = pinctrl_register_and_init(&iod->desc, dev, iod, &iod->pctl);
890 platform_set_drvdata(pdev, iod);
892 return pinctrl_enable(iod->pctl);
907 struct ti_iodelay_device *iod = platform_get_drvdata(pdev);
909 if (!iod)
912 if (iod->pctl)
913 pinctrl_unregister(iod->pctl);
915 ti_iodelay_pinconf_deinit_dev(iod);