Lines Matching defs:jzpc
139 struct ingenic_pinctrl *jzpc;
161 is_soc_or_above(const struct ingenic_pinctrl *jzpc, enum jz_version version)
165 || jzpc->info->version >= version);
3263 regmap_read(jzgc->jzpc->map, jzgc->reg_base + reg, &val);
3271 if (!is_soc_or_above(jzgc->jzpc, ID_JZ4740)) {
3272 regmap_update_bits(jzgc->jzpc->map, jzgc->reg_base + reg,
3282 regmap_write(jzgc->jzpc->map, jzgc->reg_base + reg, BIT(offset));
3293 regmap_write(jzgc->jzpc->map, REG_PZ_BASE(
3294 jzgc->jzpc->info->reg_offset) + reg, BIT(offset));
3299 regmap_write(jzgc->jzpc->map, REG_PZ_GID2LD(
3300 jzgc->jzpc->info->reg_offset),
3315 regmap_update_bits(jzgc->jzpc->map, jzgc->reg_base + reg, mask, value << (idx * 2));
3329 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3331 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3366 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770)) {
3369 } else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) {
3379 if (is_soc_or_above(jzgc->jzpc, ID_X2000)) {
3384 } else if (is_soc_or_above(jzgc->jzpc, ID_X1000)) {
3400 if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3412 if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3426 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3428 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3444 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3446 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3462 !is_soc_or_above(jzgc->jzpc, ID_X2000)) {
3474 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3476 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3502 if ((type == IRQ_TYPE_EDGE_BOTH) && !is_soc_or_above(jzgc->jzpc, ID_X2000)) {
3534 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3536 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3574 static inline void ingenic_config_pin(struct ingenic_pinctrl *jzpc,
3581 if (is_soc_or_above(jzpc, ID_JZ4740))
3582 regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
3585 regmap_set_bits(jzpc->map, offt * jzpc->info->reg_offset +
3588 if (is_soc_or_above(jzpc, ID_JZ4740))
3589 regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
3592 regmap_clear_bits(jzpc->map, offt * jzpc->info->reg_offset +
3597 static inline void ingenic_shadow_config_pin(struct ingenic_pinctrl *jzpc,
3602 regmap_write(jzpc->map, REG_PZ_BASE(jzpc->info->reg_offset) +
3606 static inline void ingenic_shadow_config_pin_load(struct ingenic_pinctrl *jzpc,
3609 regmap_write(jzpc->map, REG_PZ_GID2LD(jzpc->info->reg_offset),
3613 static inline void jz4730_config_pin_function(struct ingenic_pinctrl *jzpc,
3625 regmap_update_bits(jzpc->map, offt * jzpc->info->reg_offset + reg,
3629 static inline bool ingenic_get_pin_config(struct ingenic_pinctrl *jzpc,
3636 regmap_read(jzpc->map, offt * jzpc->info->reg_offset + reg, &val);
3644 struct ingenic_pinctrl *jzpc = jzgc->jzpc;
3647 if (is_soc_or_above(jzpc, ID_JZ4770)) {
3648 if (ingenic_get_pin_config(jzpc, pin, JZ4770_GPIO_INT) ||
3649 ingenic_get_pin_config(jzpc, pin, JZ4770_GPIO_PAT1))
3652 } else if (!is_soc_or_above(jzpc, ID_JZ4740)) {
3653 if (!ingenic_get_pin_config(jzpc, pin, JZ4730_GPIO_GPDIR))
3658 if (ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_SELECT))
3661 if (ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_DIR))
3717 static int ingenic_pinmux_set_pin_fn(struct ingenic_pinctrl *jzpc,
3723 dev_dbg(jzpc->dev, "set pin P%c%u to function %u\n",
3726 if (is_soc_or_above(jzpc, ID_X1000)) {
3727 ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_INT, false);
3728 ingenic_shadow_config_pin(jzpc, pin, GPIO_MSK, false);
3729 ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_PAT1, func & 0x2);
3730 ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_PAT0, func & 0x1);
3731 ingenic_shadow_config_pin_load(jzpc, pin);
3732 } else if (is_soc_or_above(jzpc, ID_JZ4770)) {
3733 ingenic_config_pin(jzpc, pin, JZ4770_GPIO_INT, false);
3734 ingenic_config_pin(jzpc, pin, GPIO_MSK, false);
3735 ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PAT1, func & 0x2);
3736 ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PAT0, func & 0x1);
3737 } else if (is_soc_or_above(jzpc, ID_JZ4740)) {
3738 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_FUNC, true);
3739 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_TRIG, func & 0x2);
3740 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_SELECT, func & 0x1);
3742 ingenic_config_pin(jzpc, pin, JZ4730_GPIO_GPIER, false);
3743 jz4730_config_pin_function(jzpc, pin, JZ4730_GPIO_GPAUR, JZ4730_GPIO_GPALR, func);
3752 struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev);
3773 ingenic_pinmux_set_pin_fn(jzpc, grp->pins[i], mode);
3778 ingenic_pinmux_set_pin_fn(jzpc, grp->pins[i], pin_modes[i]);
3788 struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev);
3795 if (is_soc_or_above(jzpc, ID_X1000)) {
3796 ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_INT, false);
3797 ingenic_shadow_config_pin(jzpc, pin, GPIO_MSK, true);
3798 ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_PAT1, input);
3799 ingenic_shadow_config_pin_load(jzpc, pin);
3800 } else if (is_soc_or_above(jzpc, ID_JZ4770)) {
3801 ingenic_config_pin(jzpc, pin, JZ4770_GPIO_INT, false);
3802 ingenic_config_pin(jzpc, pin, GPIO_MSK, true);
3803 ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PAT1, input);
3804 } else if (is_soc_or_above(jzpc, ID_JZ4740)) {
3805 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_SELECT, false);
3806 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_DIR, !input);
3807 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_FUNC, false);
3809 ingenic_config_pin(jzpc, pin, JZ4730_GPIO_GPIER, false);
3810 ingenic_config_pin(jzpc, pin, JZ4730_GPIO_GPDIR, !input);
3811 jz4730_config_pin_function(jzpc, pin, JZ4730_GPIO_GPAUR, JZ4730_GPIO_GPALR, 0);
3828 struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev);
3836 if (is_soc_or_above(jzpc, ID_X2000)) {
3837 pullup = ingenic_get_pin_config(jzpc, pin, X2000_GPIO_PEPU) &&
3838 !ingenic_get_pin_config(jzpc, pin, X2000_GPIO_PEPD) &&
3839 (jzpc->info->pull_ups[offt] & BIT(idx));
3840 pulldown = ingenic_get_pin_config(jzpc, pin, X2000_GPIO_PEPD) &&
3841 !ingenic_get_pin_config(jzpc, pin, X2000_GPIO_PEPU) &&
3842 (jzpc->info->pull_downs[offt] & BIT(idx));
3844 } else if (is_soc_or_above(jzpc, ID_X1830)) {
3849 regmap_read(jzpc->map, offt * jzpc->info->reg_offset +
3852 regmap_read(jzpc->map, offt * jzpc->info->reg_offset +
3857 pullup = (bias == GPIO_PULL_UP) && (jzpc->info->pull_ups[offt] & BIT(idx));
3858 pulldown = (bias == GPIO_PULL_DOWN) && (jzpc->info->pull_downs[offt] & BIT(idx));
3861 if (is_soc_or_above(jzpc, ID_JZ4770))
3862 pull = !ingenic_get_pin_config(jzpc, pin, JZ4770_GPIO_PEN);
3863 else if (is_soc_or_above(jzpc, ID_JZ4740))
3864 pull = !ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_PULL_DIS);
3866 pull = ingenic_get_pin_config(jzpc, pin, JZ4730_GPIO_GPPUR);
3868 pullup = pull && (jzpc->info->pull_ups[offt] & BIT(idx));
3869 pulldown = pull && (jzpc->info->pull_downs[offt] & BIT(idx));
3892 if (is_soc_or_above(jzpc, ID_X2000))
3894 else if (is_soc_or_above(jzpc, ID_X1830))
3899 arg = !!ingenic_get_pin_config(jzpc, pin, reg);
3903 if (is_soc_or_above(jzpc, ID_X2000))
3905 else if (is_soc_or_above(jzpc, ID_X1830))
3910 arg = !!ingenic_get_pin_config(jzpc, pin, reg);
3921 static void ingenic_set_bias(struct ingenic_pinctrl *jzpc,
3924 if (is_soc_or_above(jzpc, ID_X2000)) {
3927 ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPD, false);
3928 ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPU, true);
3932 ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPU, false);
3933 ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPD, true);
3938 ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPU, false);
3939 ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPD, false);
3942 } else if (is_soc_or_above(jzpc, ID_X1830)) {
3949 regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
3951 regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
3954 regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
3956 regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
3960 } else if (is_soc_or_above(jzpc, ID_JZ4770)) {
3961 ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PEN, !bias);
3962 } else if (is_soc_or_above(jzpc, ID_JZ4740)) {
3963 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_PULL_DIS, !bias);
3965 ingenic_config_pin(jzpc, pin, JZ4730_GPIO_GPPUR, bias);
3969 static void ingenic_set_schmitt_trigger(struct ingenic_pinctrl *jzpc,
3972 if (is_soc_or_above(jzpc, ID_X2000))
3973 ingenic_config_pin(jzpc, pin, X2000_GPIO_SMT, enable);
3975 ingenic_config_pin(jzpc, pin, X1830_GPIO_SMT, enable);
3978 static void ingenic_set_output_level(struct ingenic_pinctrl *jzpc,
3981 if (is_soc_or_above(jzpc, ID_JZ4770))
3982 ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PAT0, high);
3983 else if (is_soc_or_above(jzpc, ID_JZ4740))
3984 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_DATA, high);
3986 ingenic_config_pin(jzpc, pin, JZ4730_GPIO_DATA, high);
3989 static void ingenic_set_slew_rate(struct ingenic_pinctrl *jzpc,
3992 if (is_soc_or_above(jzpc, ID_X2000))
3993 ingenic_config_pin(jzpc, pin, X2000_GPIO_SR, slew);
3995 ingenic_config_pin(jzpc, pin, X1830_GPIO_SR, slew);
4001 struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev);
4026 dev_dbg(jzpc->dev, "disable pull-over for pin P%c%u\n",
4028 ingenic_set_bias(jzpc, pin, GPIO_PULL_DIS);
4032 if (!(jzpc->info->pull_ups[offt] & BIT(idx)))
4034 dev_dbg(jzpc->dev, "set pull-up for pin P%c%u\n",
4036 ingenic_set_bias(jzpc, pin, GPIO_PULL_UP);
4040 if (!(jzpc->info->pull_downs[offt] & BIT(idx)))
4042 dev_dbg(jzpc->dev, "set pull-down for pin P%c%u\n",
4044 ingenic_set_bias(jzpc, pin, GPIO_PULL_DOWN);
4048 if (!is_soc_or_above(jzpc, ID_X1830))
4051 ingenic_set_schmitt_trigger(jzpc, pin, arg);
4059 ingenic_set_output_level(jzpc, pin, arg);
4063 if (!is_soc_or_above(jzpc, ID_X1830))
4066 ingenic_set_slew_rate(jzpc, pin, arg);
4156 static int __init ingenic_gpio_probe(struct ingenic_pinctrl *jzpc,
4160 struct device *dev = jzpc->dev;
4175 jzgc->jzpc = jzpc;
4176 jzgc->reg_base = bank * jzpc->info->reg_offset;
4231 struct ingenic_pinctrl *jzpc;
4246 jzpc = devm_kzalloc(dev, sizeof(*jzpc), GFP_KERNEL);
4247 if (!jzpc)
4262 jzpc->map = devm_regmap_init_mmio(dev, base, ®map_config);
4263 if (IS_ERR(jzpc->map)) {
4265 return PTR_ERR(jzpc->map);
4268 jzpc->dev = dev;
4269 jzpc->info = chip_info;
4282 pctl_desc->pins = jzpc->pdesc = devm_kcalloc(&pdev->dev,
4283 pctl_desc->npins, sizeof(*jzpc->pdesc), GFP_KERNEL);
4284 if (!jzpc->pdesc)
4288 jzpc->pdesc[i].number = i;
4289 jzpc->pdesc[i].name = kasprintf(GFP_KERNEL, "P%c%d",
4294 jzpc->pctl = devm_pinctrl_register(dev, pctl_desc, jzpc);
4295 if (IS_ERR(jzpc->pctl)) {
4297 return PTR_ERR(jzpc->pctl);
4303 err = pinctrl_generic_add_group(jzpc->pctl, group->name,
4315 err = pinmux_generic_add_function(jzpc->pctl, func->name,
4325 dev_set_drvdata(dev, jzpc->map);
4329 err = ingenic_gpio_probe(jzpc, fwnode);