On Fri, Nov 15, 2019 at 08:30:18AM +0000, Eugen.Hristev@xxxxxxxxxxxxx wrote: > From: Eugen Hristev <eugen.hristev@xxxxxxxxxxxxx> > > Add support for SAM9X60 WDT into sama5d4_wdt. > This means that this driver gets a flag inside the data struct > that represents the sam9x60 support. > This flag differentiates between the two hardware blocks, and is set > according to the compatible of the driver instantiation. > > Signed-off-by: Eugen Hristev <eugen.hristev@xxxxxxxxxxxxx> > --- > Changes in v4: > - check compatible with different of_ function > - call irq parse and map only if need_irq > - changed tabbing in struct defintion > > Changes in v3: > - changed need_irq to bool, instead of a single bit variable. > - the platform data config struct is gone now, changed to a pointer to a bool > to have the sam9x60_support as 'true', pointing to a static bool with true value. > Can have a better solution than this ? > - the specific sam9x60_support flag is assigned at probe time, corresponding > to the flag value in .data > > drivers/watchdog/at91sam9_wdt.h | 14 ++++++ > drivers/watchdog/sama5d4_wdt.c | 109 +++++++++++++++++++++++++++++++--------- > 2 files changed, 98 insertions(+), 25 deletions(-) > > diff --git a/drivers/watchdog/at91sam9_wdt.h b/drivers/watchdog/at91sam9_wdt.h > index abfe34d..4b3bd1d 100644 > --- a/drivers/watchdog/at91sam9_wdt.h > +++ b/drivers/watchdog/at91sam9_wdt.h > @@ -24,7 +24,10 @@ > #define AT91_WDT_MR 0x04 /* Watchdog Mode Register */ > #define AT91_WDT_WDV (0xfffUL << 0) /* Counter Value */ > #define AT91_WDT_SET_WDV(x) ((x) & AT91_WDT_WDV) > +#define AT91_SAM9X60_PERIODRST BIT(4) /* Period Reset */ > +#define AT91_SAM9X60_RPTHRST BIT(5) /* Minimum Restart Period */ > #define AT91_WDT_WDFIEN BIT(12) /* Fault Interrupt Enable */ > +#define AT91_SAM9X60_WDDIS BIT(12) /* Watchdog Disable */ > #define AT91_WDT_WDRSTEN BIT(13) /* Reset Processor */ > #define AT91_WDT_WDRPROC BIT(14) /* Timer Restart */ > #define AT91_WDT_WDDIS BIT(15) /* Watchdog Disable */ > @@ -37,4 +40,15 @@ > #define AT91_WDT_WDUNF BIT(0) /* Watchdog Underflow */ > #define AT91_WDT_WDERR BIT(1) /* Watchdog Error */ > > +#define AT91_SAM9X60_VR 0x08 /* Watchdog Timer Value Register */ > + > +#define AT91_SAM9X60_WLR 0x0c > +#define AT91_SAM9X60_COUNTER (0xfffUL << 0) /* Watchdog Period Value */ > +#define AT91_SAM9X60_SET_COUNTER(x) ((x) & AT91_SAM9X60_COUNTER) > + > +#define AT91_SAM9X60_IER 0x14 /* Interrupt Enable Register */ > +#define AT91_SAM9X60_PERINT BIT(0) /* Period Interrupt Enable */ > +#define AT91_SAM9X60_IDR 0x18 /* Interrupt Disable Register */ > +#define AT91_SAM9X60_ISR 0x1c /* Interrupt Status Register */ > + Lots of line-too-long checkpatch warnings. Please avoid. Thanks, Guenter