Re: [PATCH 1/9] ARM: boards: protonic-imx6: prtvt7 hardkey inputs are active low

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ahmand,

On 2022-06-20 09:51, Ahmad Fatoum wrote:
Hello,

On 17.06.22 10:44, Marco Felsch wrote:
On 22-06-17, Sascha Hauer wrote:
Or, it is active low and your patch is correct :D

If they are, can we add a comment or _N suffix to the names?

Does barebox not have gpiod? The board code just should check if it is
active or not. Whatever active means in this case.

There is gpiod_get(), but there's also gpio-keys support. See
drivers/input/specialkeys.c for an example on how to register an input
notifier.

I dont think I can use gpiod_get() due to the device tree format for
gpio-keys. I didn't know about the input_notifier framework. I'll check
if I can get it to work with that as-well.


Robin, did you test this works with barebox v2022.05.0?
I'd have assumed this to be broken by f349b662674e ("gpio: allocate dynamic
gpio numbers top down"). Especially, with deep probe, you can't and shouldn't depend on GPIO expanders numbering being fixed. If you use an input notifier,
you should sidestep this issue altogether.

I just notiched that as well. I was just making some changes including the
feadback from this thread:

diff --git a/arch/arm/boards/protonic-imx6/board.c b/arch/arm/boards/protonic-imx6/board.c
index cdbb8debe6..374ec11364 100644
--- a/arch/arm/boards/protonic-imx6/board.c
+++ b/arch/arm/boards/protonic-imx6/board.c
@@ -635,17 +635,24 @@ static int prt_imx6_init_kvg_yaco(struct prt_imx6_priv *priv)
        return prt_imx6_init_kvg_power(priv, PW_MODE_KVG_WITH_YACO);
 }

-#define GPIO_KEY_F6     (0xe0 + 5)
-#define GPIO_KEY_CYCLE  (0xe0 + 2)
-
 static int prt_imx6_init_prtvt7(struct prt_imx6_priv *priv)
 {
-       /* This function relies heavely on the gpio-pca9539 driver */
+       int gpio_f6, gpio_cycle;
+       struct device_d *gpio_expander;
+
+       gpio_expander = get_device_by_name("pca95390");
+       if (!gpio_expander) {
+               dev_err(priv->dev, "Can't find pca9539 gpio expander\n");
+               return -ENODEV;
+       }
+
+       gpio_cycle = gpio_get_num(gpio_expander, 2);
+ gpio_request_one(gpio_cycle, GPIOF_ACTIVE_LOW | GPIOF_DIR_IN, "Cycle");

-       gpio_direction_input(GPIO_KEY_F6);
-       gpio_direction_input(GPIO_KEY_CYCLE);
+       gpio_f6 = gpio_get_num(gpio_expander, 5);
+       gpio_request_one(gpio_f6, GPIOF_ACTIVE_LOW | GPIOF_DIR_IN, "F6");

-       if (gpio_get_value(GPIO_KEY_CYCLE) && gpio_get_value(GPIO_KEY_F6))
+       if (!(gpio_is_active(gpio_cycle) && gpio_is_active(gpio_f6)))
                priv->no_usb_check = 1;

        return 0;

I'll make a proposal with the input_notifier aswell.

- Robin




[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux