Lines Matching refs:jzgc

3267 static u32 ingenic_gpio_read_reg(struct ingenic_gpio_chip *jzgc, u8 reg)  in ingenic_gpio_read_reg()  argument
3271 regmap_read(jzgc->jzpc->map, jzgc->reg_base + reg, &val); in ingenic_gpio_read_reg()
3276 static void ingenic_gpio_set_bit(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_set_bit() argument
3279 if (!is_soc_or_above(jzgc->jzpc, ID_JZ4740)) { in ingenic_gpio_set_bit()
3280 regmap_update_bits(jzgc->jzpc->map, jzgc->reg_base + reg, in ingenic_gpio_set_bit()
3290 regmap_write(jzgc->jzpc->map, jzgc->reg_base + reg, BIT(offset)); in ingenic_gpio_set_bit()
3293 static void ingenic_gpio_shadow_set_bit(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_shadow_set_bit() argument
3301 regmap_write(jzgc->jzpc->map, REG_PZ_BASE( in ingenic_gpio_shadow_set_bit()
3302 jzgc->jzpc->info->reg_offset) + reg, BIT(offset)); in ingenic_gpio_shadow_set_bit()
3305 static void ingenic_gpio_shadow_set_bit_load(struct ingenic_gpio_chip *jzgc) in ingenic_gpio_shadow_set_bit_load() argument
3307 regmap_write(jzgc->jzpc->map, REG_PZ_GID2LD( in ingenic_gpio_shadow_set_bit_load()
3308 jzgc->jzpc->info->reg_offset), in ingenic_gpio_shadow_set_bit_load()
3309 jzgc->gc.base / PINS_PER_GPIO_CHIP); in ingenic_gpio_shadow_set_bit_load()
3312 static void jz4730_gpio_set_bits(struct ingenic_gpio_chip *jzgc, in jz4730_gpio_set_bits() argument
3323 regmap_update_bits(jzgc->jzpc->map, jzgc->reg_base + reg, mask, value << (idx * 2)); in jz4730_gpio_set_bits()
3326 static inline bool ingenic_gpio_get_value(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_get_value() argument
3329 unsigned int val = ingenic_gpio_read_reg(jzgc, GPIO_PIN); in ingenic_gpio_get_value()
3334 static void ingenic_gpio_set_value(struct ingenic_gpio_chip *jzgc, in ingenic_gpio_set_value() argument
3337 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770)) in ingenic_gpio_set_value()
3338 ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_PAT0, offset, !!value); in ingenic_gpio_set_value()
3339 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) in ingenic_gpio_set_value()
3340 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_DATA, offset, !!value); in ingenic_gpio_set_value()
3342 ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_DATA, offset, !!value); in ingenic_gpio_set_value()
3345 static void irq_set_type(struct ingenic_gpio_chip *jzgc, in irq_set_type() argument
3374 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770)) { in irq_set_type()
3377 } else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) { in irq_set_type()
3381 ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPDIR, offset, false); in irq_set_type()
3382 jz4730_gpio_set_bits(jzgc, JZ4730_GPIO_GPIDUR, in irq_set_type()
3387 if (is_soc_or_above(jzgc->jzpc, ID_X2000)) { in irq_set_type()
3388 ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, val1); in irq_set_type()
3389 ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, val2); in irq_set_type()
3390 ingenic_gpio_shadow_set_bit_load(jzgc); in irq_set_type()
3391 ingenic_gpio_set_bit(jzgc, X2000_GPIO_EDG, offset, val3); in irq_set_type()
3392 } else if (is_soc_or_above(jzgc->jzpc, ID_X1000)) { in irq_set_type()
3393 ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, val1); in irq_set_type()
3394 ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, val2); in irq_set_type()
3395 ingenic_gpio_shadow_set_bit_load(jzgc); in irq_set_type()
3397 ingenic_gpio_set_bit(jzgc, reg2, offset, val1); in irq_set_type()
3398 ingenic_gpio_set_bit(jzgc, reg1, offset, val2); in irq_set_type()
3405 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_mask() local
3408 if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) in ingenic_gpio_irq_mask()
3409 ingenic_gpio_set_bit(jzgc, GPIO_MSK, irq, true); in ingenic_gpio_irq_mask()
3411 ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIMR, irq, true); in ingenic_gpio_irq_mask()
3417 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_unmask() local
3420 if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) in ingenic_gpio_irq_unmask()
3421 ingenic_gpio_set_bit(jzgc, GPIO_MSK, irq, false); in ingenic_gpio_irq_unmask()
3423 ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIMR, irq, false); in ingenic_gpio_irq_unmask()
3429 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_enable() local
3434 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770)) in ingenic_gpio_irq_enable()
3435 ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_INT, irq, true); in ingenic_gpio_irq_enable()
3436 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) in ingenic_gpio_irq_enable()
3437 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, true); in ingenic_gpio_irq_enable()
3439 ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIER, irq, true); in ingenic_gpio_irq_enable()
3447 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_disable() local
3452 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770)) in ingenic_gpio_irq_disable()
3453 ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_INT, irq, false); in ingenic_gpio_irq_disable()
3454 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) in ingenic_gpio_irq_disable()
3455 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, false); in ingenic_gpio_irq_disable()
3457 ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIER, irq, false); in ingenic_gpio_irq_disable()
3465 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_ack() local
3470 !is_soc_or_above(jzgc->jzpc, ID_X2000)) { in ingenic_gpio_irq_ack()
3475 high = ingenic_gpio_get_value(jzgc, irq); in ingenic_gpio_irq_ack()
3477 irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_LOW); in ingenic_gpio_irq_ack()
3479 irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_HIGH); in ingenic_gpio_irq_ack()
3482 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770)) in ingenic_gpio_irq_ack()
3483 ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_FLAG, irq, false); in ingenic_gpio_irq_ack()
3484 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) in ingenic_gpio_irq_ack()
3485 ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_DATA, irq, true); in ingenic_gpio_irq_ack()
3487 ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPFR, irq, false); in ingenic_gpio_irq_ack()
3493 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_set_type() local
3510 if ((type == IRQ_TYPE_EDGE_BOTH) && !is_soc_or_above(jzgc->jzpc, ID_X2000)) { in ingenic_gpio_irq_set_type()
3516 bool high = ingenic_gpio_get_value(jzgc, irq); in ingenic_gpio_irq_set_type()
3521 irq_set_type(jzgc, irq, type); in ingenic_gpio_irq_set_type()
3528 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_set_wake() local
3530 return irq_set_irq_wake(jzgc->irq, on); in ingenic_gpio_irq_set_wake()
3536 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_irq_handler() local
3542 if (is_soc_or_above(jzgc->jzpc, ID_JZ4770)) in ingenic_gpio_irq_handler()
3543 flag = ingenic_gpio_read_reg(jzgc, JZ4770_GPIO_FLAG); in ingenic_gpio_irq_handler()
3544 else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) in ingenic_gpio_irq_handler()
3545 flag = ingenic_gpio_read_reg(jzgc, JZ4740_GPIO_FLAG); in ingenic_gpio_irq_handler()
3547 flag = ingenic_gpio_read_reg(jzgc, JZ4730_GPIO_GPFR); in ingenic_gpio_irq_handler()
3557 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_set() local
3559 ingenic_gpio_set_value(jzgc, offset, value); in ingenic_gpio_set()
3564 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_get() local
3566 return (int) ingenic_gpio_get_value(jzgc, offset); in ingenic_gpio_get()
3645 struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc); in ingenic_gpio_get_direction() local
3646 struct ingenic_pinctrl *jzpc = jzgc->jzpc; in ingenic_gpio_get_direction()
4162 struct ingenic_gpio_chip *jzgc; in ingenic_gpio_probe() local
4174 jzgc = devm_kzalloc(dev, sizeof(*jzgc), GFP_KERNEL); in ingenic_gpio_probe()
4175 if (!jzgc) in ingenic_gpio_probe()
4178 jzpc->gc = &jzgc->gc; in ingenic_gpio_probe()
4180 jzgc->jzpc = jzpc; in ingenic_gpio_probe()
4181 jzgc->reg_base = bank * jzpc->info->reg_offset; in ingenic_gpio_probe()
4183 jzgc->gc.label = devm_kasprintf(dev, GFP_KERNEL, "GPIO%c", 'A' + bank); in ingenic_gpio_probe()
4184 if (!jzgc->gc.label) in ingenic_gpio_probe()
4191 jzgc->gc.base = bank * 32; in ingenic_gpio_probe()
4193 jzgc->gc.ngpio = 32; in ingenic_gpio_probe()
4194 jzgc->gc.parent = dev; in ingenic_gpio_probe()
4195 jzgc->gc.fwnode = fwnode; in ingenic_gpio_probe()
4196 jzgc->gc.owner = THIS_MODULE; in ingenic_gpio_probe()
4198 jzgc->gc.set = ingenic_gpio_set; in ingenic_gpio_probe()
4199 jzgc->gc.get = ingenic_gpio_get; in ingenic_gpio_probe()
4200 jzgc->gc.direction_input = pinctrl_gpio_direction_input; in ingenic_gpio_probe()
4201 jzgc->gc.direction_output = ingenic_gpio_direction_output; in ingenic_gpio_probe()
4202 jzgc->gc.get_direction = ingenic_gpio_get_direction; in ingenic_gpio_probe()
4203 jzgc->gc.request = gpiochip_generic_request; in ingenic_gpio_probe()
4204 jzgc->gc.free = gpiochip_generic_free; in ingenic_gpio_probe()
4211 jzgc->irq = err; in ingenic_gpio_probe()
4213 girq = &jzgc->gc.irq; in ingenic_gpio_probe()
4222 girq->parents[0] = jzgc->irq; in ingenic_gpio_probe()
4226 err = devm_gpiochip_add_data(dev, &jzgc->gc, jzgc); in ingenic_gpio_probe()