Lines Matching refs:jzpc
96 struct ingenic_pinctrl *jzpc; member
2009 regmap_read(jzgc->jzpc->map, jzgc->reg_base + reg, &val); in ingenic_gpio_read_reg()
2022 regmap_write(jzgc->jzpc->map, jzgc->reg_base + reg, BIT(offset)); in ingenic_gpio_set_bit()
2033 regmap_write(jzgc->jzpc->map, REG_PZ_BASE( in ingenic_gpio_shadow_set_bit()
2034 jzgc->jzpc->info->reg_offset) + reg, BIT(offset)); in ingenic_gpio_shadow_set_bit()
2039 regmap_write(jzgc->jzpc->map, REG_PZ_GID2LD( in ingenic_gpio_shadow_set_bit_load()
2040 jzgc->jzpc->info->reg_offset), in ingenic_gpio_shadow_set_bit_load()
2055 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_set_value()
2085 if (jzgc->jzpc->info->version >= ID_JZ4770) { in irq_set_type()
2093 if (jzgc->jzpc->info->version >= ID_X1000) { in irq_set_type()
2125 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_enable()
2141 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_disable()
2166 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_ack()
2223 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_handler()
2261 static inline void ingenic_config_pin(struct ingenic_pinctrl *jzpc, in ingenic_config_pin() argument
2267 regmap_write(jzpc->map, offt * jzpc->info->reg_offset + in ingenic_config_pin()
2271 static inline void ingenic_shadow_config_pin(struct ingenic_pinctrl *jzpc, in ingenic_shadow_config_pin() argument
2276 regmap_write(jzpc->map, REG_PZ_BASE(jzpc->info->reg_offset) + in ingenic_shadow_config_pin()
2280 static inline void ingenic_shadow_config_pin_load(struct ingenic_pinctrl *jzpc, in ingenic_shadow_config_pin_load() argument
2283 regmap_write(jzpc->map, REG_PZ_GID2LD(jzpc->info->reg_offset), in ingenic_shadow_config_pin_load()
2287 static inline bool ingenic_get_pin_config(struct ingenic_pinctrl *jzpc, in ingenic_get_pin_config() argument
2294 regmap_read(jzpc->map, offt * jzpc->info->reg_offset + reg, &val); in ingenic_get_pin_config()
2302 struct ingenic_pinctrl *jzpc = jzgc->jzpc; in ingenic_gpio_get_direction() local
2305 if (jzpc->info->version >= ID_JZ4770) { in ingenic_gpio_get_direction()
2306 if (ingenic_get_pin_config(jzpc, pin, JZ4760_GPIO_INT) || in ingenic_gpio_get_direction()
2307 ingenic_get_pin_config(jzpc, pin, JZ4760_GPIO_PAT1)) in ingenic_gpio_get_direction()
2312 if (ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_SELECT)) in ingenic_gpio_get_direction()
2315 if (ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_DIR)) in ingenic_gpio_get_direction()
2348 static int ingenic_pinmux_set_pin_fn(struct ingenic_pinctrl *jzpc, in ingenic_pinmux_set_pin_fn() argument
2354 dev_dbg(jzpc->dev, "set pin P%c%u to function %u\n", in ingenic_pinmux_set_pin_fn()
2357 if (jzpc->info->version >= ID_X1000) { in ingenic_pinmux_set_pin_fn()
2358 ingenic_shadow_config_pin(jzpc, pin, JZ4760_GPIO_INT, false); in ingenic_pinmux_set_pin_fn()
2359 ingenic_shadow_config_pin(jzpc, pin, GPIO_MSK, false); in ingenic_pinmux_set_pin_fn()
2360 ingenic_shadow_config_pin(jzpc, pin, JZ4760_GPIO_PAT1, func & 0x2); in ingenic_pinmux_set_pin_fn()
2361 ingenic_shadow_config_pin(jzpc, pin, JZ4760_GPIO_PAT0, func & 0x1); in ingenic_pinmux_set_pin_fn()
2362 ingenic_shadow_config_pin_load(jzpc, pin); in ingenic_pinmux_set_pin_fn()
2363 } else if (jzpc->info->version >= ID_JZ4770) { in ingenic_pinmux_set_pin_fn()
2364 ingenic_config_pin(jzpc, pin, JZ4760_GPIO_INT, false); in ingenic_pinmux_set_pin_fn()
2365 ingenic_config_pin(jzpc, pin, GPIO_MSK, false); in ingenic_pinmux_set_pin_fn()
2366 ingenic_config_pin(jzpc, pin, JZ4760_GPIO_PAT1, func & 0x2); in ingenic_pinmux_set_pin_fn()
2367 ingenic_config_pin(jzpc, pin, JZ4760_GPIO_PAT0, func & 0x1); in ingenic_pinmux_set_pin_fn()
2369 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_FUNC, true); in ingenic_pinmux_set_pin_fn()
2370 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_TRIG, func & 0x2); in ingenic_pinmux_set_pin_fn()
2371 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_SELECT, func & 0x1); in ingenic_pinmux_set_pin_fn()
2380 struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev); in ingenic_pinmux_set_mux() local
2399 ingenic_pinmux_set_pin_fn(jzpc, grp->pins[i], pin_modes[i]); in ingenic_pinmux_set_mux()
2409 struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev); in ingenic_pinmux_gpio_set_direction() local
2416 if (jzpc->info->version >= ID_X1000) { in ingenic_pinmux_gpio_set_direction()
2417 ingenic_shadow_config_pin(jzpc, pin, JZ4760_GPIO_INT, false); in ingenic_pinmux_gpio_set_direction()
2418 ingenic_shadow_config_pin(jzpc, pin, GPIO_MSK, true); in ingenic_pinmux_gpio_set_direction()
2419 ingenic_shadow_config_pin(jzpc, pin, JZ4760_GPIO_PAT1, input); in ingenic_pinmux_gpio_set_direction()
2420 ingenic_shadow_config_pin_load(jzpc, pin); in ingenic_pinmux_gpio_set_direction()
2421 } else if (jzpc->info->version >= ID_JZ4770) { in ingenic_pinmux_gpio_set_direction()
2422 ingenic_config_pin(jzpc, pin, JZ4760_GPIO_INT, false); in ingenic_pinmux_gpio_set_direction()
2423 ingenic_config_pin(jzpc, pin, GPIO_MSK, true); in ingenic_pinmux_gpio_set_direction()
2424 ingenic_config_pin(jzpc, pin, JZ4760_GPIO_PAT1, input); in ingenic_pinmux_gpio_set_direction()
2426 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_SELECT, false); in ingenic_pinmux_gpio_set_direction()
2427 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_DIR, !input); in ingenic_pinmux_gpio_set_direction()
2428 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_FUNC, false); in ingenic_pinmux_gpio_set_direction()
2445 struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev); in ingenic_pinconf_get() local
2451 if (jzpc->info->version >= ID_JZ4770) in ingenic_pinconf_get()
2452 pull = !ingenic_get_pin_config(jzpc, pin, JZ4760_GPIO_PEN); in ingenic_pinconf_get()
2454 pull = !ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_PULL_DIS); in ingenic_pinconf_get()
2463 if (!pull || !(jzpc->info->pull_ups[offt] & BIT(idx))) in ingenic_pinconf_get()
2468 if (!pull || !(jzpc->info->pull_downs[offt] & BIT(idx))) in ingenic_pinconf_get()
2480 static void ingenic_set_bias(struct ingenic_pinctrl *jzpc, in ingenic_set_bias() argument
2483 if (jzpc->info->version >= ID_X1830) { in ingenic_set_bias()
2490 regmap_write(jzpc->map, offt * jzpc->info->reg_offset + in ingenic_set_bias()
2492 regmap_write(jzpc->map, offt * jzpc->info->reg_offset + in ingenic_set_bias()
2495 regmap_write(jzpc->map, offt * jzpc->info->reg_offset + in ingenic_set_bias()
2497 regmap_write(jzpc->map, offt * jzpc->info->reg_offset + in ingenic_set_bias()
2501 } else if (jzpc->info->version >= ID_JZ4770) { in ingenic_set_bias()
2502 ingenic_config_pin(jzpc, pin, JZ4760_GPIO_PEN, !bias); in ingenic_set_bias()
2504 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_PULL_DIS, !bias); in ingenic_set_bias()
2508 static void ingenic_set_output_level(struct ingenic_pinctrl *jzpc, in ingenic_set_output_level() argument
2511 if (jzpc->info->version >= ID_JZ4770) in ingenic_set_output_level()
2512 ingenic_config_pin(jzpc, pin, JZ4760_GPIO_PAT0, high); in ingenic_set_output_level()
2514 ingenic_config_pin(jzpc, pin, JZ4740_GPIO_DATA, high); in ingenic_set_output_level()
2520 struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev); in ingenic_pinconf_set() local
2543 dev_dbg(jzpc->dev, "disable pull-over for pin P%c%u\n", in ingenic_pinconf_set()
2545 ingenic_set_bias(jzpc, pin, GPIO_PULL_DIS); in ingenic_pinconf_set()
2549 if (!(jzpc->info->pull_ups[offt] & BIT(idx))) in ingenic_pinconf_set()
2551 dev_dbg(jzpc->dev, "set pull-up for pin P%c%u\n", in ingenic_pinconf_set()
2553 ingenic_set_bias(jzpc, pin, GPIO_PULL_UP); in ingenic_pinconf_set()
2557 if (!(jzpc->info->pull_downs[offt] & BIT(idx))) in ingenic_pinconf_set()
2559 dev_dbg(jzpc->dev, "set pull-down for pin P%c%u\n", in ingenic_pinconf_set()
2561 ingenic_set_bias(jzpc, pin, GPIO_PULL_DOWN); in ingenic_pinconf_set()
2569 ingenic_set_output_level(jzpc, pin, arg); in ingenic_pinconf_set()
2653 static int __init ingenic_gpio_probe(struct ingenic_pinctrl *jzpc, in ingenic_gpio_probe() argument
2657 struct device *dev = jzpc->dev; in ingenic_gpio_probe()
2672 jzgc->jzpc = jzpc; in ingenic_gpio_probe()
2673 jzgc->reg_base = bank * jzpc->info->reg_offset; in ingenic_gpio_probe()
2736 struct ingenic_pinctrl *jzpc; in ingenic_pinctrl_probe() local
2744 jzpc = devm_kzalloc(dev, sizeof(*jzpc), GFP_KERNEL); in ingenic_pinctrl_probe()
2745 if (!jzpc) in ingenic_pinctrl_probe()
2752 jzpc->map = devm_regmap_init_mmio(dev, base, in ingenic_pinctrl_probe()
2754 if (IS_ERR(jzpc->map)) { in ingenic_pinctrl_probe()
2756 return PTR_ERR(jzpc->map); in ingenic_pinctrl_probe()
2759 jzpc->dev = dev; in ingenic_pinctrl_probe()
2760 jzpc->info = chip_info = of_device_get_match_data(dev); in ingenic_pinctrl_probe()
2773 pctl_desc->pins = jzpc->pdesc = devm_kcalloc(&pdev->dev, in ingenic_pinctrl_probe()
2774 pctl_desc->npins, sizeof(*jzpc->pdesc), GFP_KERNEL); in ingenic_pinctrl_probe()
2775 if (!jzpc->pdesc) in ingenic_pinctrl_probe()
2779 jzpc->pdesc[i].number = i; in ingenic_pinctrl_probe()
2780 jzpc->pdesc[i].name = kasprintf(GFP_KERNEL, "P%c%d", in ingenic_pinctrl_probe()
2785 jzpc->pctl = devm_pinctrl_register(dev, pctl_desc, jzpc); in ingenic_pinctrl_probe()
2786 if (IS_ERR(jzpc->pctl)) { in ingenic_pinctrl_probe()
2788 return PTR_ERR(jzpc->pctl); in ingenic_pinctrl_probe()
2794 err = pinctrl_generic_add_group(jzpc->pctl, group->name, in ingenic_pinctrl_probe()
2806 err = pinmux_generic_add_function(jzpc->pctl, func->name, in ingenic_pinctrl_probe()
2816 dev_set_drvdata(dev, jzpc->map); in ingenic_pinctrl_probe()
2820 err = ingenic_gpio_probe(jzpc, node); in ingenic_pinctrl_probe()