All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sylwester Nawrocki <s.nawrocki@samsung.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: linux-media@vger.kernel.org,
	Hans Verkuil <hans.verkuil@cisco.com>,
	Lars-Peter Clausen <lars@metafoo.de>,
	devicetree@vger.kernel.org
Subject: Re: [PATCH v4 45/49] adv7604: Add DT support
Date: Thu, 17 Apr 2014 16:39:29 +0200	[thread overview]
Message-ID: <534FE7A1.8060800@samsung.com> (raw)
In-Reply-To: <1397744000-23967-46-git-send-email-laurent.pinchart@ideasonboard.com>

Hi Laurent,

On 17/04/14 16:13, Laurent Pinchart wrote:
> Parse the device tree node to populate platform data. Only the ADV7611
> is currently support with DT.
> 
> Cc: devicetree@vger.kernel.org
> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Acked-by: Hans Verkuil <hans.verkuil@cisco.com>

The patch looks good to me.

Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

Just one comment below...
> ---
>  .../devicetree/bindings/media/i2c/adv7604.txt      | 57 +++++++++++++++
>  drivers/media/i2c/adv7604.c                        | 80 ++++++++++++++++++----
>  2 files changed, 123 insertions(+), 14 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/media/i2c/adv7604.txt
> 
> diff --git a/Documentation/devicetree/bindings/media/i2c/adv7604.txt b/Documentation/devicetree/bindings/media/i2c/adv7604.txt
> new file mode 100644
> index 0000000..2efb48f
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/i2c/adv7604.txt
> @@ -0,0 +1,57 @@
> +* Analog Devices ADV7604/11 video decoder with HDMI receiver
> +
> +The ADV7604 and ADV7611 are multiformat video decoders with an integrated HDMI
> +receiver. The ADV7604 has four multiplexed HDMI inputs and one analog input,
> +and the ADV7611 has one HDMI input and no analog input.
> +
> +These device tree bindings support the ADV7611 only at the moment.
> +
> +Required Properties:
> +
> +  - compatible: Must contain one of the following
> +    - "adi,adv7611" for the ADV7611
> +
> +  - reg: I2C slave address
> +
> +  - hpd-gpios: References to the GPIOs that control the HDMI hot-plug
> +    detection pins, one per HDMI input. The active flag indicates the GPIO
> +    level that enables hot-plug detection.
> +
> +The device node must contain one 'port' child node per device input and output
> +port, in accordance with the video interface bindings defined in
> +Documentation/devicetree/bindings/media/video-interfaces.txt. The port nodes
> +are numbered as follows.
> +
> +  Port			ADV7611
> +------------------------------------------------------------
> +  HDMI			0
> +  Digital output	1
> +
> +The digital output port node must contain at least one endpoint.
> +
> +Optional Properties:
> +
> +  - reset-gpios: Reference to the GPIO connected to the device's reset pin.
> +
> +Example:
> +
> +	hdmi_receiver@4c {
> +		compatible = "adi,adv7611";
> +		reg = <0x4c>;
> +
> +		reset-gpios = <&ioexp 0 GPIO_ACTIVE_LOW>;
> +		hpd-gpios = <&ioexp 2 GPIO_ACTIVE_HIGH>;
> +
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		port@0 {
> +			reg = <0>;
> +		};
> +		port@1 {
> +			reg = <1>;
> +			hdmi_in: endpoint {
> +				remote-endpoint = <&ccdc_in>;
> +			};
> +		};
> +	};
> diff --git a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c
> index 342d73d..061794e 100644
> --- a/drivers/media/i2c/adv7604.c
> +++ b/drivers/media/i2c/adv7604.c
> @@ -2663,13 +2663,58 @@ static const struct adv7604_chip_info adv7604_chip_info[] = {
>  	},
>  };
>  
> +static struct i2c_device_id adv7604_i2c_id[] = {
> +	{ "adv7604", (kernel_ulong_t)&adv7604_chip_info[ADV7604] },
> +	{ "adv7611", (kernel_ulong_t)&adv7604_chip_info[ADV7611] },
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(i2c, adv7604_i2c_id);
> +
> +static struct of_device_id adv7604_of_id[] = {

Not adding __maybe_unused attribute to this one ?

> +	{ .compatible = "adi,adv7611", .data = &adv7604_chip_info[ADV7611] },
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(of, adv7604_of_id);
> +
> +static int adv7604_parse_dt(struct adv7604_state *state)
> +{
> +	/* Disable the interrupt for now as no DT-based board uses it. */
> +	state->pdata.int1_config = ADV7604_INT1_CONFIG_DISABLED;
> +
> +	/* Use the default I2C addresses. */
> +	state->pdata.i2c_addresses[ADV7604_PAGE_AVLINK] = 0x42;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_CEC] = 0x40;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_INFOFRAME] = 0x3e;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_ESDP] = 0x38;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_DPP] = 0x3c;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_AFE] = 0x26;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_REP] = 0x32;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_EDID] = 0x36;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_HDMI] = 0x34;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_TEST] = 0x30;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_CP] = 0x22;
> +	state->pdata.i2c_addresses[ADV7604_PAGE_VDP] = 0x24;
> +
> +	/* Hardcode the remaining platform data fields. */
> +	state->pdata.disable_pwrdnb = 0;
> +	state->pdata.disable_cable_det_rst = 0;
> +	state->pdata.default_input = -1;
> +	state->pdata.blank_data = 1;
> +	state->pdata.op_656_range = 1;
> +	state->pdata.alt_data_sat = 1;
> +	state->pdata.insert_av_codes = 1;
> +	state->pdata.op_format_mode_sel = ADV7604_OP_FORMAT_MODE0;
> +	state->pdata.bus_order = ADV7604_BUS_ORDER_RGB;
> +
> +	return 0;
> +}
> +
>  static int adv7604_probe(struct i2c_client *client,
>  			 const struct i2c_device_id *id)
>  {
>  	static const struct v4l2_dv_timings cea640x480 =
>  		V4L2_DV_BT_CEA_640X480P59_94;
>  	struct adv7604_state *state;
> -	struct adv7604_platform_data *pdata = client->dev.platform_data;
>  	struct v4l2_ctrl_handler *hdl;
>  	struct v4l2_subdev *sd;
>  	unsigned int i;
> @@ -2688,19 +2733,32 @@ static int adv7604_probe(struct i2c_client *client,
>  		return -ENOMEM;
>  	}
>  
> -	state->info = &adv7604_chip_info[id->driver_data];
>  	state->i2c_clients[ADV7604_PAGE_IO] = client;
>  
>  	/* initialize variables */
>  	state->restart_stdi_once = true;
>  	state->selected_input = ~0;
>  
> -	/* platform data */
> -	if (!pdata) {
> +	if (IS_ENABLED(CONFIG_OF) && client->dev.of_node) {
> +		const struct of_device_id *oid;
> +
> +		oid = of_match_node(adv7604_of_id, client->dev.of_node);
> +		state->info = oid->data;
> +
> +		err = adv7604_parse_dt(state);
> +		if (err < 0) {
> +			v4l_err(client, "DT parsing error\n");
> +			return err;
> +		}
> +	} else if (client->dev.platform_data) {
> +		struct adv7604_platform_data *pdata = client->dev.platform_data;
> +
> +		state->info = (const struct adv7604_chip_info *)id->driver_data;
> +		state->pdata = *pdata;
> +	} else {
>  		v4l_err(client, "No platform data!\n");
>  		return -ENODEV;
>  	}
> -	state->pdata = *pdata;
>  
>  	/* Request GPIOs. */
>  	for (i = 0; i < state->info->num_dv_ports; ++i) {
> @@ -2799,7 +2857,7 @@ static int adv7604_probe(struct i2c_client *client,
>  			continue;
>  
>  		state->i2c_clients[i] =
> -			adv7604_dummy_client(sd, pdata->i2c_addresses[i],
> +			adv7604_dummy_client(sd, state->pdata.i2c_addresses[i],
>  					     0xf2 + i);
>  		if (state->i2c_clients[i] == NULL) {
>  			err = -ENOMEM;
> @@ -2873,21 +2931,15 @@ static int adv7604_remove(struct i2c_client *client)
>  
>  /* ----------------------------------------------------------------------- */
>  
> -static struct i2c_device_id adv7604_id[] = {
> -	{ "adv7604", ADV7604 },
> -	{ "adv7611", ADV7611 },
> -	{ }
> -};
> -MODULE_DEVICE_TABLE(i2c, adv7604_id);
> -
>  static struct i2c_driver adv7604_driver = {
>  	.driver = {
>  		.owner = THIS_MODULE,
>  		.name = "adv7604",
> +		.of_match_table = of_match_ptr(adv7604_of_id),
>  	},
>  	.probe = adv7604_probe,
>  	.remove = adv7604_remove,
> -	.id_table = adv7604_id,
> +	.id_table = adv7604_i2c_id,
>  };
>  
>  module_i2c_driver(adv7604_driver);
> 

-- 
Regards,
Sylwester

  reply	other threads:[~2014-04-17 14:39 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-17 14:12 [PATCH v4 00/49] ADV7611 support Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 01/49] v4l: Add UYVY10_2X10 and VYUY10_2X10 media bus pixel codes Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 02/49] v4l: Add UYVY10_1X20 and VYUY10_1X20 " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 03/49] v4l: Add 12-bit YUV 4:2:0 " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 04/49] v4l: Add 12-bit YUV 4:2:2 " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 05/49] v4l: Add pad-level DV timings subdev operations Laurent Pinchart
2014-05-13 16:51   ` Mauro Carvalho Chehab
2014-05-13 21:23     ` Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 06/49] ad9389b: Add pad-level DV timings operations Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 07/49] adv7511: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 08/49] adv7842: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 09/49] s5p-tv: hdmi: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 10/49] s5p-tv: hdmiphy: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 11/49] ths8200: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 12/49] tvp7002: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 13/49] media: bfin_capture: Switch to pad-level DV operations Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 14/49] media: davinci: vpif: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 15/49] media: staging: davinci: vpfe: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 16/49] s5p-tv: mixer: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 17/49] ad9389b: Remove deprecated video-level DV timings operations Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 18/49] adv7511: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 19/49] adv7842: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 20/49] s5p-tv: hdmi: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 21/49] s5p-tv: hdmiphy: Remove deprecated video-level DV timings operation Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 22/49] ths8200: Remove deprecated video-level DV timings operations Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 23/49] tvp7002: " Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 24/49] v4l: Improve readability by not wrapping ioctl number #define's Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 25/49] v4l: Add support for DV timings ioctls on subdev nodes Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 26/49] v4l: Validate fields in the core code for subdev EDID ioctls Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 27/49] adv7604: Add missing include to linux/types.h Laurent Pinchart
2014-04-17 14:12 ` [PATCH v4 28/49] adv7604: Add support for asynchronous probing Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 29/49] adv7604: Don't put info string arrays on the stack Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 30/49] adv7604: Add 16-bit read functions for CP and HDMI Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 31/49] adv7604: Cache register contents when reading multiple bits Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 32/49] adv7604: Add adv7611 support Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 33/49] adv7604: Remove subdev control handlers Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 34/49] adv7604: Add sink pads Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 35/49] adv7604: Make output format configurable through pad format operations Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 36/49] adv7604: Add pad-level DV timings support Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 37/49] adv7604: Remove deprecated video-level DV timings operations Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 38/49] v4l: subdev: " Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 39/49] adv7604: Inline the to_sd function Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 40/49] adv7604: Store I2C addresses and clients in arrays Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 41/49] adv7604: Replace *_and_or() functions with *_clr_set() Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 42/49] adv7604: Sort headers alphabetically Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 43/49] adv7604: Support hot-plug detect control through a GPIO Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 44/49] adv7604: Specify the default input through platform data Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 45/49] adv7604: Add DT support Laurent Pinchart
2014-04-17 14:39   ` Sylwester Nawrocki [this message]
2014-04-17 14:43     ` Laurent Pinchart
2014-04-17 14:52     ` Sylwester Nawrocki
2014-04-17 14:13 ` [PATCH v4 46/49] adv7604: Add LLC polarity configuration Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 47/49] adv7604: Add endpoint properties to DT bindings Laurent Pinchart
2014-04-17 14:44   ` Sylwester Nawrocki
2014-04-17 14:13 ` [PATCH v4 48/49] adv7604: Set HPD GPIO direction to output Laurent Pinchart
2014-04-17 14:13 ` [PATCH v4 49/49] adv7604: Mark adv7604_of_id table with __maybe_unused Laurent Pinchart

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=534FE7A1.8060800@samsung.com \
    --to=s.nawrocki@samsung.com \
    --cc=devicetree@vger.kernel.org \
    --cc=hans.verkuil@cisco.com \
    --cc=lars@metafoo.de \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.