On Mon, Oct 26, 2020 at 05:22:45PM +0200, Andy Shevchenko wrote:
On Mon, Oct 26, 2020 at 5:16 PM Coiby Xu <[email protected]> wrote:

Print the status of debounce filter as follows,
$ cat /sys/kernel/debug/gpio
pin129          interrupt is disabled| interrupt is masked| disable wakeup in 
S0i3 state| disable wakeup in S3 state|
 disable wakeup in S4/S5 state| input is high|   pull-up is disabled| Pull-down 
is disabled|   output is disabled| debouncing filter disabled|   0x50000
pin130          interrupt is disabled| interrupt is masked| disable wakeup in 
S0i3 state| disable wakeup in S3 state|
 disable wakeup in S4/S5 state| input is high|   pull-up is disabled| Pull-down 
is disabled|   output is disabled| debouncing filter (high) enabled| debouncing 
timeout is 124800 (us)| 0x503c8
                                                                                
                                  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Thanks for an update!
In general looks good, one nit below (sorry, missed it in v1 round)

Thank you for the feedbacks!
...

+       char debounce_value[40];

(1)

...

+                               if (tmr_large) {
+                                       if (tmr_out_unit)
+                                               unit = 62500;
+                                       else

+                                               unit = 15600;

Side note: Hmm... Shouldn't be 15625? As 1/4.

Thank you for discovering the inconsistency! I wrote these code based on
amd_gpio_set_debounce. I'll send an email to the original author to
confirm it.

static int amd_gpio_set_debounce(struct gpio_chip *gc, unsigned offset,
                unsigned debounce)
{
    ...
        if (debounce) {
                pin_reg |= DB_TYPE_REMOVE_GLITCH << DB_CNTRL_OFF;
                pin_reg &= ~DB_TMR_OUT_MASK;
                /*
                Debounce        Debounce        Timer   Max
                TmrLarge        TmrOutUnit      Unit    Debounce
                                                        Time
                0       0       61 usec (2 RtcClk)      976 usec
                0       1       244 usec (8 RtcClk)     3.9 msec
                1       0       15.6 msec (512 RtcClk)  250 msec
                1       1       62.5 msec (2048 RtcClk) 1 sec
                */

                if (debounce < 61) {
                        pin_reg |= 1;
                        pin_reg &= ~BIT(DB_TMR_OUT_UNIT_OFF);
                        pin_reg &= ~BIT(DB_TMR_LARGE_OFF);
                } else if (debounce < 976) {
                        time = debounce / 61;
                        pin_reg |= time & DB_TMR_OUT_MASK;
                        pin_reg &= ~BIT(DB_TMR_OUT_UNIT_OFF);
                        pin_reg &= ~BIT(DB_TMR_LARGE_OFF);
        ...

+                               } else {
+                                       if (tmr_out_unit)
+                                               unit = 244;
+                                       else
+                                               unit = 61;

...


+                               snprintf(debounce_value, 40,
+                                        "debouncing timeout is %u (us)|", time 
* unit);

(2)

...

+                               snprintf(debounce_value, 40, " ");

(3)

Because of definition (1) can you in (2) and (3) use sizeof() ?

I've considered defining a constant. Obviously sizeof is a better
idea:)

--
With Best Regards,
Andy Shevchenko

--
Best regards,
Coiby

Reply via email to