[PATCH v4] watchdog: Add DA906x PMIC watchdog driver.

Opensource [Steve Twiss] stwiss.opensource at diasemi.com
Fri Aug 22 08:47:48 PDT 2014


On 16 August 2014 13:36, Markus Pargmann [mailto:mpa at pengutronix.de] wrote:

> Subject: [PATCH v4] watchdog: Add DA906x PMIC watchdog driver.

Hi Markus,

> 
> From: Krystian Garbaciak <krystian.garbaciak at diasemi.com>
> 
> This driver supports the watchdog device inside the DA906x PMIC.
> 

There is only DA9063 , in this case there is no "x". Thanks.

[...]

> +
> +/*
> + * Watchdog selector to timeout in seconds.
> + *   0: WDT disabled;
> + *   others: timeout = 2048 ms * 2^(TWDSCALE-1).
> + */
> +static const int wdt_timeout[] = { 0, 2, 4, 8, 16, 32, 65, 131 };

This table is just an approximation of the real times provided by the PMIC. 

The first three bits in the CONTROL_D register at 0x11 define a scaling value
for the nominal maximum time TWDMAX. The 7 values specifying the timeout
of the watchdog are:

001 = 1 = 1x = 2048ms 
010 = 2 = 2x = 4096ms
011 = 3 = 4x = 8192ms
100 = 4 = 8x = 16384ms
101 = 5 = 16x = 32768ms
110 = 6 = 32x = 65536ms
111 = 7 = 64x = 131072ms

 [...]

> +
> +static int da9063_wdt_disable(struct da9063 *da9063)
> +{
> +	return regmap_update_bits(da9063->regmap,
> DA9063_REG_CONTROL_D,
> +			DA9063_TWDSCALE_MASK,
> +			DA9063_TWDSCALE_DISABLE);
> +}
> +
> +static int _da9063_wdt_set_timeout(struct da9063 *da9063, unsigned int
> regval)
> +{
> +	return regmap_update_bits(da9063->regmap,
> DA9063_REG_CONTROL_D,
> +			DA9063_TWDSCALE_MASK, regval);
> +}
> +
> +static int _da9063_wdt_kick(struct da9063 *da9063)
> +{
> +	return regmap_write(da9063->regmap, DA9063_REG_CONTROL_F,
> +			DA9063_WATCHDOG);
> +}
> +

The _da9063_wdt_kick() and da9063_wdt_disable() functions are only used once
throughout the code -- in the watchdog_ops functions da9063_wdt_ping() and
da9063_wdt_stop() respectively. 
Since these are just simple regmap calls, could they be added at those places
directly and therefore remove the function calls?

[...]

> +static int da9063_wdt_start(struct watchdog_device *wdd)
> +{
> +	struct da9063_watchdog *wdt = watchdog_get_drvdata(wdd);
> +	unsigned int selector;
> +	int ret;
> +
> +	selector = da9063_wdt_timeout_to_sel(wdt->wdtdev.timeout);
> +	if (selector < 0) {

Unsigned if < 0

 [...]

> +static int da9063_wdt_set_timeout(struct watchdog_device *wdd,
> +		unsigned int timeout)
> +{
> +	struct da9063_watchdog *wdt = watchdog_get_drvdata(wdd);
> +	unsigned int selector;
> +	int ret;
> +
> +	selector = da9063_wdt_timeout_to_sel(timeout);
> +	if (selector < 0) {

And again

Regards,
Steve



More information about the linux-arm-kernel mailing list