On Tue 22 January 2013 06:19:50 Prabhakar Lad wrote:
> From: Lad, Prabhakar <prabhakar....@ti.com>
> 
> The current code was implemented with some default configurations,
> this default configuration works on board and doesn't work on other.
> 
> This patch accepts the configuration through platform data and configures
> the encoder depending on the data passed.
> 
> Signed-off-by: Lad, Prabhakar <prabhakar....@ti.com>
> Cc: Hans Verkuil <hans.verk...@cisco.com>
> Cc: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> Cc: Mauro Carvalho Chehab <mche...@redhat.com>

Acked-by: Hans Verkuil <hans.verk...@cisco.com>

Regards,

        Hans

> ---
>   Changes for v2:
>   1: Fixed review comments pointed by Hans.
> 
>  drivers/media/i2c/adv7343.c |   36 +++++++++++++++++++++++++----
>  include/media/adv7343.h     |   52 
> +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 83 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/media/i2c/adv7343.c b/drivers/media/i2c/adv7343.c
> index 2b5aa67..a058058 100644
> --- a/drivers/media/i2c/adv7343.c
> +++ b/drivers/media/i2c/adv7343.c
> @@ -43,6 +43,7 @@ MODULE_PARM_DESC(debug, "Debug level 0-1");
>  struct adv7343_state {
>       struct v4l2_subdev sd;
>       struct v4l2_ctrl_handler hdl;
> +     const struct adv7343_platform_data *pdata;
>       u8 reg00;
>       u8 reg01;
>       u8 reg02;
> @@ -215,12 +216,23 @@ static int adv7343_setoutput(struct v4l2_subdev *sd, 
> u32 output_type)
>       /* Enable Appropriate DAC */
>       val = state->reg00 & 0x03;
>  
> -     if (output_type == ADV7343_COMPOSITE_ID)
> -             val |= ADV7343_COMPOSITE_POWER_VALUE;
> -     else if (output_type == ADV7343_COMPONENT_ID)
> -             val |= ADV7343_COMPONENT_POWER_VALUE;
> +     /* configure default configuration */
> +     if (!state->pdata)
> +             if (output_type == ADV7343_COMPOSITE_ID)
> +                     val |= ADV7343_COMPOSITE_POWER_VALUE;
> +             else if (output_type == ADV7343_COMPONENT_ID)
> +                     val |= ADV7343_COMPONENT_POWER_VALUE;
> +             else
> +                     val |= ADV7343_SVIDEO_POWER_VALUE;
>       else
> -             val |= ADV7343_SVIDEO_POWER_VALUE;
> +             val = state->pdata->mode_config.sleep_mode << 0 |
> +                   state->pdata->mode_config.pll_control << 1 |
> +                   state->pdata->mode_config.dac_3 << 2 |
> +                   state->pdata->mode_config.dac_2 << 3 |
> +                   state->pdata->mode_config.dac_1 << 4 |
> +                   state->pdata->mode_config.dac_6 << 5 |
> +                   state->pdata->mode_config.dac_5 << 6 |
> +                   state->pdata->mode_config.dac_4 << 7;
>  
>       err = adv7343_write(sd, ADV7343_POWER_MODE_REG, val);
>       if (err < 0)
> @@ -238,6 +250,17 @@ static int adv7343_setoutput(struct v4l2_subdev *sd, u32 
> output_type)
>  
>       /* configure SD DAC Output 2 and SD DAC Output 1 bit to zero */
>       val = state->reg82 & (SD_DAC_1_DI & SD_DAC_2_DI);
> +
> +     if (state->pdata && state->pdata->sd_config.sd_dac_out1)
> +             val = val | (state->pdata->sd_config.sd_dac_out1 << 1);
> +     else if (state->pdata && !state->pdata->sd_config.sd_dac_out1)
> +             val = val & ~(state->pdata->sd_config.sd_dac_out1 << 1);
> +
> +     if (state->pdata && state->pdata->sd_config.sd_dac_out2)
> +             val = val | (state->pdata->sd_config.sd_dac_out2 << 2);
> +     else if (state->pdata && !state->pdata->sd_config.sd_dac_out2)
> +             val = val & ~(state->pdata->sd_config.sd_dac_out2 << 2);
> +
>       err = adv7343_write(sd, ADV7343_SD_MODE_REG2, val);
>       if (err < 0)
>               goto setoutput_exit;
> @@ -401,6 +424,9 @@ static int adv7343_probe(struct i2c_client *client,
>       if (state == NULL)
>               return -ENOMEM;
>  
> +     /* Copy board specific information here */
> +     state->pdata = client->dev.platform_data;
> +
>       state->reg00    = 0x80;
>       state->reg01    = 0x00;
>       state->reg02    = 0x20;
> diff --git a/include/media/adv7343.h b/include/media/adv7343.h
> index d6f8a4e..944757b 100644
> --- a/include/media/adv7343.h
> +++ b/include/media/adv7343.h
> @@ -20,4 +20,56 @@
>  #define ADV7343_COMPONENT_ID (1)
>  #define ADV7343_SVIDEO_ID    (2)
>  
> +/**
> + * adv7343_power_mode - power mode configuration.
> + * @sleep_mode: on enable the current consumption is reduced to micro ampere
> + *           level. All DACs and the internal PLL circuit are disabled.
> + *           Registers can be read from and written in sleep mode.
> + * @pll_control: PLL and oversampling control. This control allows internal
> + *            PLL 1 circuit to be powered down and the oversampling to be
> + *            switched off.
> + * @dac_1: power on/off DAC 1.
> + * @dac_2: power on/off DAC 2.
> + * @dac_3: power on/off DAC 3.
> + * @dac_4: power on/off DAC 4.
> + * @dac_5: power on/off DAC 5.
> + * @dac_6: power on/off DAC 6.
> + *
> + * Power mode register (Register 0x0), for more info refer REGISTER MAP 
> ACCESS
> + * section of datasheet[1], table 17 page no 30.
> + *
> + * [1] 
> http://www.analog.com/static/imported-files/data_sheets/ADV7342_7343.pdf
> + */
> +struct adv7343_power_mode {
> +     bool sleep_mode;
> +     bool pll_control;
> +     bool dac_1;
> +     bool dac_2;
> +     bool dac_3;
> +     bool dac_4;
> +     bool dac_5;
> +     bool dac_6;
> +};
> +
> +/**
> + * struct adv7343_sd_config - SD Only Output Configuration.
> + * @sd_dac_out1: Configure SD DAC Output 1.
> + * @sd_dac_out2: Configure SD DAC Output 2.
> + */
> +struct adv7343_sd_config {
> +     /* SD only Output Configuration */
> +     bool sd_dac_out1;
> +     bool sd_dac_out2;
> +};
> +
> +/**
> + * struct adv7343_platform_data - Platform data values and access functions.
> + * @mode_config: Configuration for power mode.
> + * @sd_config: SD Only Configuration.
> + */
> +struct adv7343_platform_data {
> +     struct adv7343_power_mode mode_config;
> +     struct adv7343_sd_config sd_config;
> +};
> +
>  #endif                               /* End of #ifndef ADV7343_H */
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to