Re: [PATCH 2/2] pinctrl: renesas: rzg2l: Enable noise filter for GPIO interrupt input

From: Linus Walleij
Date: Mon Sep 25 2023 - 09:19:54 EST


On Wed, Sep 20, 2023 at 4:06 PM Biju Das <biju.das.jz@xxxxxxxxxxxxxx> wrote:

> > > 2) Digital Noise Filter Clock Selection Register (FILCLKSEL):
> > >
> > > The FILCLKSEL register selects the divided clock to be input to digital
> > noise filters.
> > >
> > > 00b: Not divided (initial value)
> > > 01b: Divided by 9000 (41.666 ns x 9000 = 375,000 ns)
> > > 10b: Divided by 18000 (41.666 ns x 18000 = 750,000 ns)
> > > 11b: Divided by 36000 (41.666 ns x 36000 = 1,500,000 ns)
> > > Note: This value is the value when the external clock is 24MHz.
> > >
> > > Q1) What is the recommended way to associate the above values with
> > > PIN_CONFIG_INPUT_DEBOUNCE?
> > >
> > > Eg: I need to configure filter on, 8 stage filter , a divisor of 18000
> > for a mechanical button bounce noise.
> >
> > As per the generic pin config and DT bindings:
> >
> > * @PIN_CONFIG_INPUT_DEBOUNCE: this will configure the pin to debounce
> > mode,
> > * which means it will wait for signals to settle when reading inputs.
> > The
> > * argument gives the debounce time in usecs. Setting the
> > * argument to zero turns debouncing off.
> >
> > input-debounce:
> > $ref: /schemas/types.yaml#/definitions/uint32
> > description: Takes the debounce time in usec as argument or 0 to
> > disable
> > debouncing
> >
> > The recommended way is to pass the desired clock cycle in microseconds as
> > the argument to the pin config.
>
> How to add number of FF stages info on top of this clock cycle?

You don't, look below.

> Use some encoding in DT and decode it in driver??

No you put in the desired delay in microseconds, the you use
the table that you already provided to look up the appropriate
divisor:

> 00b: Not divided (initial value)
> 01b: Divided by 9000 (41.666 ns x 9000 = 375,000 ns)
> 10b: Divided by 18000 (41.666 ns x 18000 = 750,000 ns)
> 11b: Divided by 36000 (41.666 ns x 36000 = 1,500,000 ns)

For 0, 375, 750 and 1500 us...

> Note: This value is the value when the external clock is 24MHz.

And this can be provided from the clock framework, and then
you need some more elaborate math to calculate the right
divisor from the parameter in the device tree.

Yours,
Linus Walleij