Source
369
369
370
370
mvebu_gpio_blink(chip, pin, 0);
371
371
mvebu_gpio_set(chip, pin, value);
372
372
373
373
regmap_update_bits(mvchip->regs, GPIO_IO_CONF_OFF + mvchip->offset,
374
374
BIT(pin), 0);
375
375
376
376
return 0;
377
377
}
378
378
379
+
static int mvebu_gpio_get_direction(struct gpio_chip *chip, unsigned int pin)
380
+
{
381
+
struct mvebu_gpio_chip *mvchip = gpiochip_get_data(chip);
382
+
u32 u;
383
+
384
+
regmap_read(mvchip->regs, GPIO_IO_CONF_OFF + mvchip->offset, &u);
385
+
386
+
return !!(u & BIT(pin));
387
+
}
388
+
379
389
static int mvebu_gpio_to_irq(struct gpio_chip *chip, unsigned int pin)
380
390
{
381
391
struct mvebu_gpio_chip *mvchip = gpiochip_get_data(chip);
382
392
383
393
return irq_create_mapping(mvchip->domain, pin);
384
394
}
385
395
386
396
/*
387
397
* Functions implementing the irq_chip methods
388
398
*/
1123
1133
mvchip->clk = devm_clk_get(&pdev->dev, NULL);
1124
1134
/* Not all SoCs require a clock.*/
1125
1135
if (!IS_ERR(mvchip->clk))
1126
1136
clk_prepare_enable(mvchip->clk);
1127
1137
1128
1138
mvchip->soc_variant = soc_variant;
1129
1139
mvchip->chip.label = dev_name(&pdev->dev);
1130
1140
mvchip->chip.parent = &pdev->dev;
1131
1141
mvchip->chip.request = gpiochip_generic_request;
1132
1142
mvchip->chip.free = gpiochip_generic_free;
1143
+
mvchip->chip.get_direction = mvebu_gpio_get_direction;
1133
1144
mvchip->chip.direction_input = mvebu_gpio_direction_input;
1134
1145
mvchip->chip.get = mvebu_gpio_get;
1135
1146
mvchip->chip.direction_output = mvebu_gpio_direction_output;
1136
1147
mvchip->chip.set = mvebu_gpio_set;
1137
1148
if (have_irqs)
1138
1149
mvchip->chip.to_irq = mvebu_gpio_to_irq;
1139
1150
mvchip->chip.base = id * MVEBU_MAX_GPIO_PER_BANK;
1140
1151
mvchip->chip.ngpio = ngpios;
1141
1152
mvchip->chip.can_sleep = false;
1142
1153
mvchip->chip.of_node = np;