Subject: [PATCH 5/7] mfd: twl4030-power: Add support for board specific configuration

From: [email-masked] (Lee Jones)
Date: Wed, 21 May 2014 10:18:57 +0100

On Tue, 20 May 2014, Tony Lindgren wrote:

> * Lee Jones <[email-masked]> [140520 08:18]:
> > 
> > Ah, I forgot to Ack this last time, didn't I?
> > 
> >   Acked-by: Lee Jones <[email-masked]>
> 
> Yeah, here's this one updated with your ack.

Has the code changed at all, or are you just reposting with my Ack
applied?

> 8< ---------------------------
> From: Tony Lindgren <[email-masked]>
> Date: Tue, 20 May 2014 11:17:54 -0700
> Subject: [PATCH] mfd: twl4030-power: Add support for board specific configuration
> 
> With the recommended twl4030 configuration added, we can now add
> board specific changes as modifications to the recommended
> configuration.
> 
> Note that the data is private to this driver, and the data must
> always have a NULL resource in the sentinel.
> 
> Cc: Peter De Schrijver <[email-masked]>
> Cc: Samuel Ortiz <[email-masked]>
> Acked-by: Lee Jones <[email-masked]>
> Signed-off-by: Tony Lindgren <[email-masked]>
> 
> --- a/drivers/mfd/twl4030-power.c
> +++ b/drivers/mfd/twl4030-power.c
> @@ -567,13 +567,34 @@ twl4030_power_configure_scripts(const struct twl4030_power_data *pdata)
>  	return 0;
>  }
>  
> +static void twl4030_patch_rconfig(struct twl4030_resconfig *common,
> +				  struct twl4030_resconfig *board)
> +{
> +	while (common->resource) {
> +		struct twl4030_resconfig *b = board;
> +
> +		while (b->resource) {
> +			if (b->resource == common->resource) {
> +				*common = *b;
> +				break;
> +			}
> +			b++;
> +		}
> +		common++;
> +	}
> +}
> +
>  static int
>  twl4030_power_configure_resources(const struct twl4030_power_data *pdata)
>  {
>  	struct twl4030_resconfig *resconfig = pdata->resource_config;
> +	struct twl4030_resconfig *boardconf = pdata->board_config;
>  	int err;
>  
>  	if (resconfig) {
> +		if (boardconf)
> +			twl4030_patch_rconfig(resconfig, boardconf);
> +
>  		while (resconfig->resource) {
>  			err = twl4030_configure_resource(resconfig);
>  			if (err)
> --- a/include/linux/i2c/twl.h
> +++ b/include/linux/i2c/twl.h
> @@ -674,6 +674,7 @@ struct twl4030_power_data {
>  	struct twl4030_script **scripts;
>  	unsigned num;
>  	struct twl4030_resconfig *resource_config;
> +	struct twl4030_resconfig *board_config;
>  #define TWL4030_RESCONFIG_UNDEF	((u8)-1)
>  	bool use_poweroff;	/* Board is wired for TWL poweroff */
>  };

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog