hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpio/gpio-mvebu.c
....@@ -38,6 +38,7 @@
3838 #include <linux/err.h>
3939 #include <linux/gpio/driver.h>
4040 #include <linux/gpio/consumer.h>
41
+#include <linux/gpio/machine.h>
4142 #include <linux/init.h>
4243 #include <linux/io.h>
4344 #include <linux/irq.h>
....@@ -45,7 +46,6 @@
4546 #include <linux/irqdomain.h>
4647 #include <linux/mfd/syscon.h>
4748 #include <linux/of_device.h>
48
-#include <linux/of_irq.h>
4949 #include <linux/pinctrl/consumer.h>
5050 #include <linux/platform_device.h>
5151 #include <linux/pwm.h>
....@@ -376,6 +376,19 @@
376376 return 0;
377377 }
378378
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
+ if (u & BIT(pin))
387
+ return GPIO_LINE_DIRECTION_IN;
388
+
389
+ return GPIO_LINE_DIRECTION_OUT;
390
+}
391
+
379392 static int mvebu_gpio_to_irq(struct gpio_chip *chip, unsigned int pin)
380393 {
381394 struct mvebu_gpio_chip *mvchip = gpiochip_get_data(chip);
....@@ -418,6 +431,7 @@
418431 u32 mask = d->mask;
419432
420433 irq_gc_lock(gc);
434
+ mvebu_gpio_write_edge_cause(mvchip, ~mask);
421435 ct->mask_cache_priv |= mask;
422436 mvebu_gpio_write_edge_mask(mvchip, ct->mask_cache_priv);
423437 irq_gc_unlock(gc);
....@@ -608,15 +622,11 @@
608622 ret = -EBUSY;
609623 } else {
610624 desc = gpiochip_request_own_desc(&mvchip->chip,
611
- pwm->hwpwm, "mvebu-pwm");
625
+ pwm->hwpwm, "mvebu-pwm",
626
+ GPIO_ACTIVE_HIGH,
627
+ GPIOD_OUT_LOW);
612628 if (IS_ERR(desc)) {
613629 ret = PTR_ERR(desc);
614
- goto out;
615
- }
616
-
617
- ret = gpiod_direction_output(desc, 0);
618
- if (ret) {
619
- gpiochip_free_own_desc(desc);
620630 goto out;
621631 }
622632
....@@ -682,13 +692,16 @@
682692 }
683693
684694 static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
685
- struct pwm_state *state)
695
+ const struct pwm_state *state)
686696 {
687697 struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip);
688698 struct mvebu_gpio_chip *mvchip = mvpwm->mvchip;
689699 unsigned long long val;
690700 unsigned long flags;
691701 unsigned int on, off;
702
+
703
+ if (state->polarity != PWM_POLARITY_NORMAL)
704
+ return -EINVAL;
692705
693706 val = (unsigned long long) mvpwm->clk_rate * state->duty_cycle;
694707 do_div(val, NSEC_PER_SEC);
....@@ -761,7 +774,6 @@
761774 {
762775 struct device *dev = &pdev->dev;
763776 struct mvebu_pwm *mvpwm;
764
- struct resource *res;
765777 u32 set;
766778
767779 if (!of_device_is_compatible(mvchip->chip.of_node,
....@@ -774,8 +786,7 @@
774786 * for the first two GPIO chips. So if the resource is missing
775787 * we can't treat it as an error.
776788 */
777
- res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pwm");
778
- if (!res)
789
+ if (!platform_get_resource_byname(pdev, IORESOURCE_MEM, "pwm"))
779790 return 0;
780791
781792 if (IS_ERR(mvchip->clk))
....@@ -800,7 +811,7 @@
800811 mvchip->mvpwm = mvpwm;
801812 mvpwm->mvchip = mvchip;
802813
803
- mvpwm->membase = devm_ioremap_resource(dev, res);
814
+ mvpwm->membase = devm_platform_ioremap_resource_byname(pdev, "pwm");
804815 if (IS_ERR(mvpwm->membase))
805816 return PTR_ERR(mvpwm->membase);
806817
....@@ -833,6 +844,7 @@
833844 {
834845 struct mvebu_gpio_chip *mvchip = gpiochip_get_data(chip);
835846 u32 out, io_conf, blink, in_pol, data_in, cause, edg_msk, lvl_msk;
847
+ const char *label;
836848 int i;
837849
838850 regmap_read(mvchip->regs, GPIO_OUT_OFF + mvchip->offset, &out);
....@@ -844,14 +856,9 @@
844856 edg_msk = mvebu_gpio_read_edge_mask(mvchip);
845857 lvl_msk = mvebu_gpio_read_level_mask(mvchip);
846858
847
- for (i = 0; i < chip->ngpio; i++) {
848
- const char *label;
859
+ for_each_requested_gpio(chip, i, label) {
849860 u32 msk;
850861 bool is_out;
851
-
852
- label = gpiochip_is_requested(chip, i);
853
- if (!label)
854
- continue;
855862
856863 msk = BIT(i);
857864 is_out = !(io_conf & msk);
....@@ -1023,11 +1030,9 @@
10231030 static int mvebu_gpio_probe_raw(struct platform_device *pdev,
10241031 struct mvebu_gpio_chip *mvchip)
10251032 {
1026
- struct resource *res;
10271033 void __iomem *base;
10281034
1029
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1030
- base = devm_ioremap_resource(&pdev->dev, res);
1035
+ base = devm_platform_ioremap_resource(pdev, 0);
10311036 if (IS_ERR(base))
10321037 return PTR_ERR(base);
10331038
....@@ -1047,8 +1052,7 @@
10471052 * per-CPU registers
10481053 */
10491054 if (mvchip->soc_variant == MVEBU_GPIO_SOC_VARIANT_ARMADAXP) {
1050
- res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1051
- base = devm_ioremap_resource(&pdev->dev, res);
1055
+ base = devm_platform_ioremap_resource(pdev, 1);
10521056 if (IS_ERR(base))
10531057 return PTR_ERR(base);
10541058
....@@ -1095,7 +1099,11 @@
10951099 soc_variant = MVEBU_GPIO_SOC_VARIANT_ORION;
10961100
10971101 /* Some gpio controllers do not provide irq support */
1098
- have_irqs = of_irq_count(np) != 0;
1102
+ err = platform_irq_count(pdev);
1103
+ if (err < 0)
1104
+ return err;
1105
+
1106
+ have_irqs = err != 0;
10991107
11001108 mvchip = devm_kzalloc(&pdev->dev, sizeof(struct mvebu_gpio_chip),
11011109 GFP_KERNEL);
....@@ -1125,6 +1133,7 @@
11251133 mvchip->chip.parent = &pdev->dev;
11261134 mvchip->chip.request = gpiochip_generic_request;
11271135 mvchip->chip.free = gpiochip_generic_free;
1136
+ mvchip->chip.get_direction = mvebu_gpio_get_direction;
11281137 mvchip->chip.direction_input = mvebu_gpio_direction_input;
11291138 mvchip->chip.get = mvebu_gpio_get;
11301139 mvchip->chip.direction_output = mvebu_gpio_direction_output;
....@@ -1243,7 +1252,7 @@
12431252 * pins.
12441253 */
12451254 for (i = 0; i < 4; i++) {
1246
- int irq = platform_get_irq(pdev, i);
1255
+ int irq = platform_get_irq_optional(pdev, i);
12471256
12481257 if (irq < 0)
12491258 continue;