Lines Matching refs:jzgc

2005 static u32 ingenic_gpio_read_reg(struct ingenic_gpio_chip *jzgc, u8 reg)  in ingenic_gpio_read_reg()  argument
2009 regmap_read(jzgc->jzpc->map, jzgc->reg_base + reg, &val); in ingenic_gpio_read_reg()
2014 static void ingenic_gpio_set_bit(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_set_bit() argument
2022 regmap_write(jzgc->jzpc->map, jzgc->reg_base + reg, BIT(offset)); in ingenic_gpio_set_bit()
2025 static void ingenic_gpio_shadow_set_bit(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_shadow_set_bit() argument
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()
2037 static void ingenic_gpio_shadow_set_bit_load(struct ingenic_gpio_chip *jzgc) in ingenic_gpio_shadow_set_bit_load() argument
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()
2041 jzgc->gc.base / PINS_PER_GPIO_CHIP); in ingenic_gpio_shadow_set_bit_load()
2044 static inline bool ingenic_gpio_get_value(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_get_value() argument
2047 unsigned int val = ingenic_gpio_read_reg(jzgc, GPIO_PIN); in ingenic_gpio_get_value()
2052 static void ingenic_gpio_set_value(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_set_value() argument
2055 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_set_value()
2056 ingenic_gpio_set_bit(jzgc, JZ4760_GPIO_PAT0, offset, !!value); in ingenic_gpio_set_value()
2058 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_DATA, offset, !!value); in ingenic_gpio_set_value()
2061 static void irq_set_type(struct ingenic_gpio_chip *jzgc, in irq_set_type() argument
2085 if (jzgc->jzpc->info->version >= ID_JZ4770) { in irq_set_type()
2093 if (jzgc->jzpc->info->version >= ID_X1000) { in irq_set_type()
2094 ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, val1); in irq_set_type()
2095 ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, val2); in irq_set_type()
2096 ingenic_gpio_shadow_set_bit_load(jzgc); in irq_set_type()
2098 ingenic_gpio_set_bit(jzgc, reg2, offset, val1); in irq_set_type()
2099 ingenic_gpio_set_bit(jzgc, reg1, offset, val2); in irq_set_type()
2106 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_mask() local
2108 ingenic_gpio_set_bit(jzgc, GPIO_MSK, irqd->hwirq, true); in ingenic_gpio_irq_mask()
2114 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_unmask() local
2116 ingenic_gpio_set_bit(jzgc, GPIO_MSK, irqd->hwirq, false); in ingenic_gpio_irq_unmask()
2122 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_enable() local
2125 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_enable()
2126 ingenic_gpio_set_bit(jzgc, JZ4760_GPIO_INT, irq, true); in ingenic_gpio_irq_enable()
2128 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, true); in ingenic_gpio_irq_enable()
2136 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_disable() local
2141 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_disable()
2142 ingenic_gpio_set_bit(jzgc, JZ4760_GPIO_INT, irq, false); in ingenic_gpio_irq_disable()
2144 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, false); in ingenic_gpio_irq_disable()
2150 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_ack() local
2159 high = ingenic_gpio_get_value(jzgc, irq); in ingenic_gpio_irq_ack()
2161 irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_LOW); in ingenic_gpio_irq_ack()
2163 irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_HIGH); in ingenic_gpio_irq_ack()
2166 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_ack()
2167 ingenic_gpio_set_bit(jzgc, JZ4760_GPIO_FLAG, irq, false); in ingenic_gpio_irq_ack()
2169 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_DATA, irq, true); in ingenic_gpio_irq_ack()
2175 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_set_type() local
2197 bool high = ingenic_gpio_get_value(jzgc, irqd->hwirq); in ingenic_gpio_irq_set_type()
2202 irq_set_type(jzgc, irqd->hwirq, type); in ingenic_gpio_irq_set_type()
2209 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_set_wake() local
2211 return irq_set_irq_wake(jzgc->irq, on); in ingenic_gpio_irq_set_wake()
2217 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_handler() local
2223 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_handler()
2224 flag = ingenic_gpio_read_reg(jzgc, JZ4760_GPIO_FLAG); in ingenic_gpio_irq_handler()
2226 flag = ingenic_gpio_read_reg(jzgc, JZ4740_GPIO_FLAG); in ingenic_gpio_irq_handler()
2236 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_set() local
2238 ingenic_gpio_set_value(jzgc, offset, value); in ingenic_gpio_set()
2243 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_get() local
2245 return (int) ingenic_gpio_get_value(jzgc, offset); in ingenic_gpio_get()
2301 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_get_direction() local
2302 struct ingenic_pinctrl *jzpc = jzgc->jzpc; in ingenic_gpio_get_direction()
2656 struct ingenic_gpio_chip *jzgc; in ingenic_gpio_probe() local
2668 jzgc = devm_kzalloc(dev, sizeof(*jzgc), GFP_KERNEL); in ingenic_gpio_probe()
2669 if (!jzgc) 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()
2675 jzgc->gc.label = devm_kasprintf(dev, GFP_KERNEL, "GPIO%c", 'A' + bank); in ingenic_gpio_probe()
2676 if (!jzgc->gc.label) in ingenic_gpio_probe()
2683 jzgc->gc.base = bank * 32; in ingenic_gpio_probe()
2685 jzgc->gc.ngpio = 32; in ingenic_gpio_probe()
2686 jzgc->gc.parent = dev; in ingenic_gpio_probe()
2687 jzgc->gc.of_node = node; in ingenic_gpio_probe()
2688 jzgc->gc.owner = THIS_MODULE; in ingenic_gpio_probe()
2690 jzgc->gc.set = ingenic_gpio_set; in ingenic_gpio_probe()
2691 jzgc->gc.get = ingenic_gpio_get; in ingenic_gpio_probe()
2692 jzgc->gc.direction_input = ingenic_gpio_direction_input; in ingenic_gpio_probe()
2693 jzgc->gc.direction_output = ingenic_gpio_direction_output; in ingenic_gpio_probe()
2694 jzgc->gc.get_direction = ingenic_gpio_get_direction; in ingenic_gpio_probe()
2695 jzgc->gc.request = gpiochip_generic_request; in ingenic_gpio_probe()
2696 jzgc->gc.free = gpiochip_generic_free; in ingenic_gpio_probe()
2698 jzgc->irq = irq_of_parse_and_map(node, 0); in ingenic_gpio_probe()
2699 if (!jzgc->irq) in ingenic_gpio_probe()
2702 jzgc->irq_chip.name = jzgc->gc.label; in ingenic_gpio_probe()
2703 jzgc->irq_chip.irq_enable = ingenic_gpio_irq_enable; in ingenic_gpio_probe()
2704 jzgc->irq_chip.irq_disable = ingenic_gpio_irq_disable; in ingenic_gpio_probe()
2705 jzgc->irq_chip.irq_unmask = ingenic_gpio_irq_unmask; in ingenic_gpio_probe()
2706 jzgc->irq_chip.irq_mask = ingenic_gpio_irq_mask; in ingenic_gpio_probe()
2707 jzgc->irq_chip.irq_ack = ingenic_gpio_irq_ack; in ingenic_gpio_probe()
2708 jzgc->irq_chip.irq_set_type = ingenic_gpio_irq_set_type; in ingenic_gpio_probe()
2709 jzgc->irq_chip.irq_set_wake = ingenic_gpio_irq_set_wake; in ingenic_gpio_probe()
2710 jzgc->irq_chip.irq_request_resources = ingenic_gpio_irq_request; in ingenic_gpio_probe()
2711 jzgc->irq_chip.irq_release_resources = ingenic_gpio_irq_release; in ingenic_gpio_probe()
2712 jzgc->irq_chip.flags = IRQCHIP_MASK_ON_SUSPEND; in ingenic_gpio_probe()
2714 girq = &jzgc->gc.irq; in ingenic_gpio_probe()
2715 girq->chip = &jzgc->irq_chip; in ingenic_gpio_probe()
2722 girq->parents[0] = jzgc->irq; in ingenic_gpio_probe()
2726 err = devm_gpiochip_add_data(dev, &jzgc->gc, jzgc); in ingenic_gpio_probe()