Lines Matching refs:jzgc
2006 static u32 ingenic_gpio_read_reg(struct ingenic_gpio_chip *jzgc, u8 reg) in ingenic_gpio_read_reg() argument
2010 regmap_read(jzgc->jzpc->map, jzgc->reg_base + reg, &val); in ingenic_gpio_read_reg()
2015 static void ingenic_gpio_set_bit(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_set_bit() argument
2023 regmap_write(jzgc->jzpc->map, jzgc->reg_base + reg, BIT(offset)); in ingenic_gpio_set_bit()
2026 static void ingenic_gpio_shadow_set_bit(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_shadow_set_bit() argument
2034 regmap_write(jzgc->jzpc->map, REG_PZ_BASE( in ingenic_gpio_shadow_set_bit()
2035 jzgc->jzpc->info->reg_offset) + reg, BIT(offset)); in ingenic_gpio_shadow_set_bit()
2038 static void ingenic_gpio_shadow_set_bit_load(struct ingenic_gpio_chip *jzgc) in ingenic_gpio_shadow_set_bit_load() argument
2040 regmap_write(jzgc->jzpc->map, REG_PZ_GID2LD( in ingenic_gpio_shadow_set_bit_load()
2041 jzgc->jzpc->info->reg_offset), in ingenic_gpio_shadow_set_bit_load()
2042 jzgc->gc.base / PINS_PER_GPIO_CHIP); in ingenic_gpio_shadow_set_bit_load()
2045 static inline bool ingenic_gpio_get_value(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_get_value() argument
2048 unsigned int val = ingenic_gpio_read_reg(jzgc, GPIO_PIN); in ingenic_gpio_get_value()
2053 static void ingenic_gpio_set_value(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_set_value() argument
2056 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_set_value()
2057 ingenic_gpio_set_bit(jzgc, JZ4760_GPIO_PAT0, offset, !!value); in ingenic_gpio_set_value()
2059 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_DATA, offset, !!value); in ingenic_gpio_set_value()
2062 static void irq_set_type(struct ingenic_gpio_chip *jzgc, in irq_set_type() argument
2086 if (jzgc->jzpc->info->version >= ID_JZ4770) { in irq_set_type()
2094 if (jzgc->jzpc->info->version >= ID_X1000) { in irq_set_type()
2095 ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, val1); in irq_set_type()
2096 ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, val2); in irq_set_type()
2097 ingenic_gpio_shadow_set_bit_load(jzgc); in irq_set_type()
2099 ingenic_gpio_set_bit(jzgc, reg2, offset, val1); in irq_set_type()
2100 ingenic_gpio_set_bit(jzgc, reg1, offset, val2); in irq_set_type()
2107 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_mask() local
2109 ingenic_gpio_set_bit(jzgc, GPIO_MSK, irqd->hwirq, true); in ingenic_gpio_irq_mask()
2115 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_unmask() local
2117 ingenic_gpio_set_bit(jzgc, GPIO_MSK, irqd->hwirq, false); in ingenic_gpio_irq_unmask()
2123 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_enable() local
2126 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_enable()
2127 ingenic_gpio_set_bit(jzgc, JZ4760_GPIO_INT, irq, true); in ingenic_gpio_irq_enable()
2129 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, true); in ingenic_gpio_irq_enable()
2137 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_disable() local
2142 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_disable()
2143 ingenic_gpio_set_bit(jzgc, JZ4760_GPIO_INT, irq, false); in ingenic_gpio_irq_disable()
2145 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, false); in ingenic_gpio_irq_disable()
2151 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_ack() local
2160 high = ingenic_gpio_get_value(jzgc, irq); in ingenic_gpio_irq_ack()
2162 irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_LOW); in ingenic_gpio_irq_ack()
2164 irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_HIGH); in ingenic_gpio_irq_ack()
2167 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_ack()
2168 ingenic_gpio_set_bit(jzgc, JZ4760_GPIO_FLAG, irq, false); in ingenic_gpio_irq_ack()
2170 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_DATA, irq, true); in ingenic_gpio_irq_ack()
2176 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_set_type() local
2198 bool high = ingenic_gpio_get_value(jzgc, irqd->hwirq); in ingenic_gpio_irq_set_type()
2203 irq_set_type(jzgc, irqd->hwirq, type); in ingenic_gpio_irq_set_type()
2210 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_set_wake() local
2212 return irq_set_irq_wake(jzgc->irq, on); in ingenic_gpio_irq_set_wake()
2218 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_handler() local
2224 if (jzgc->jzpc->info->version >= ID_JZ4770) in ingenic_gpio_irq_handler()
2225 flag = ingenic_gpio_read_reg(jzgc, JZ4760_GPIO_FLAG); in ingenic_gpio_irq_handler()
2227 flag = ingenic_gpio_read_reg(jzgc, JZ4740_GPIO_FLAG); in ingenic_gpio_irq_handler()
2237 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_set() local
2239 ingenic_gpio_set_value(jzgc, offset, value); in ingenic_gpio_set()
2244 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_get() local
2246 return (int) ingenic_gpio_get_value(jzgc, offset); in ingenic_gpio_get()
2302 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_get_direction() local
2303 struct ingenic_pinctrl *jzpc = jzgc->jzpc; in ingenic_gpio_get_direction()
2657 struct ingenic_gpio_chip *jzgc; in ingenic_gpio_probe() local
2669 jzgc = devm_kzalloc(dev, sizeof(*jzgc), GFP_KERNEL); in ingenic_gpio_probe()
2670 if (!jzgc) in ingenic_gpio_probe()
2673 jzgc->jzpc = jzpc; in ingenic_gpio_probe()
2674 jzgc->reg_base = bank * jzpc->info->reg_offset; in ingenic_gpio_probe()
2676 jzgc->gc.label = devm_kasprintf(dev, GFP_KERNEL, "GPIO%c", 'A' + bank); in ingenic_gpio_probe()
2677 if (!jzgc->gc.label) in ingenic_gpio_probe()
2684 jzgc->gc.base = bank * 32; in ingenic_gpio_probe()
2686 jzgc->gc.ngpio = 32; in ingenic_gpio_probe()
2687 jzgc->gc.parent = dev; in ingenic_gpio_probe()
2688 jzgc->gc.of_node = node; in ingenic_gpio_probe()
2689 jzgc->gc.owner = THIS_MODULE; in ingenic_gpio_probe()
2691 jzgc->gc.set = ingenic_gpio_set; in ingenic_gpio_probe()
2692 jzgc->gc.get = ingenic_gpio_get; in ingenic_gpio_probe()
2693 jzgc->gc.direction_input = ingenic_gpio_direction_input; in ingenic_gpio_probe()
2694 jzgc->gc.direction_output = ingenic_gpio_direction_output; in ingenic_gpio_probe()
2695 jzgc->gc.get_direction = ingenic_gpio_get_direction; in ingenic_gpio_probe()
2696 jzgc->gc.request = gpiochip_generic_request; in ingenic_gpio_probe()
2697 jzgc->gc.free = gpiochip_generic_free; in ingenic_gpio_probe()
2699 jzgc->irq = irq_of_parse_and_map(node, 0); in ingenic_gpio_probe()
2700 if (!jzgc->irq) in ingenic_gpio_probe()
2703 jzgc->irq_chip.name = jzgc->gc.label; in ingenic_gpio_probe()
2704 jzgc->irq_chip.irq_enable = ingenic_gpio_irq_enable; in ingenic_gpio_probe()
2705 jzgc->irq_chip.irq_disable = ingenic_gpio_irq_disable; in ingenic_gpio_probe()
2706 jzgc->irq_chip.irq_unmask = ingenic_gpio_irq_unmask; in ingenic_gpio_probe()
2707 jzgc->irq_chip.irq_mask = ingenic_gpio_irq_mask; in ingenic_gpio_probe()
2708 jzgc->irq_chip.irq_ack = ingenic_gpio_irq_ack; in ingenic_gpio_probe()
2709 jzgc->irq_chip.irq_set_type = ingenic_gpio_irq_set_type; in ingenic_gpio_probe()
2710 jzgc->irq_chip.irq_set_wake = ingenic_gpio_irq_set_wake; in ingenic_gpio_probe()
2711 jzgc->irq_chip.irq_request_resources = ingenic_gpio_irq_request; in ingenic_gpio_probe()
2712 jzgc->irq_chip.irq_release_resources = ingenic_gpio_irq_release; in ingenic_gpio_probe()
2713 jzgc->irq_chip.flags = IRQCHIP_MASK_ON_SUSPEND; in ingenic_gpio_probe()
2715 girq = &jzgc->gc.irq; in ingenic_gpio_probe()
2716 girq->chip = &jzgc->irq_chip; in ingenic_gpio_probe()
2723 girq->parents[0] = jzgc->irq; in ingenic_gpio_probe()
2727 err = devm_gpiochip_add_data(dev, &jzgc->gc, jzgc); in ingenic_gpio_probe()