* [PATCH v4 45/49] adv7604: Add DT support
[not found] <1397744000-23967-1-git-send-email-laurent.pinchart@ideasonboard.com>
@ 2014-04-17 14:13 ` Laurent Pinchart
2014-04-17 14:39 ` Sylwester Nawrocki
2014-04-17 14:13 ` [PATCH v4 47/49] adv7604: Add endpoint properties to DT bindings Laurent Pinchart
1 sibling, 1 reply; 6+ messages in thread
From: Laurent Pinchart @ 2014-04-17 14:13 UTC (permalink / raw)
To: linux-media
Cc: Hans Verkuil, Lars-Peter Clausen, devicetree, Sylwester Nawrocki
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>
---
.../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[] = {
+ { .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);
--
1.8.3.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v4 47/49] adv7604: Add endpoint properties to DT bindings
[not found] <1397744000-23967-1-git-send-email-laurent.pinchart@ideasonboard.com>
2014-04-17 14:13 ` [PATCH v4 45/49] adv7604: Add DT support Laurent Pinchart
@ 2014-04-17 14:13 ` Laurent Pinchart
2014-04-17 14:44 ` Sylwester Nawrocki
1 sibling, 1 reply; 6+ messages in thread
From: Laurent Pinchart @ 2014-04-17 14:13 UTC (permalink / raw)
To: linux-media
Cc: Hans Verkuil, Lars-Peter Clausen, devicetree, Sylwester Nawrocki
Add support for the hsync-active, vsync-active and pclk-sample
properties to the DT bindings and control BT.656 mode implicitly.
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>
---
.../devicetree/bindings/media/i2c/adv7604.txt | 13 +++++++++
drivers/media/i2c/adv7604.c | 34 ++++++++++++++++++++--
2 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/i2c/adv7604.txt b/Documentation/devicetree/bindings/media/i2c/adv7604.txt
index 2efb48f..c27cede 100644
--- a/Documentation/devicetree/bindings/media/i2c/adv7604.txt
+++ b/Documentation/devicetree/bindings/media/i2c/adv7604.txt
@@ -33,6 +33,19 @@ Optional Properties:
- reset-gpios: Reference to the GPIO connected to the device's reset pin.
+Optional Endpoint Properties:
+
+ The following three properties are defined in video-interfaces.txt and are
+ valid for source endpoints only.
+
+ - hsync-active: Horizontal synchronization polarity. Defaults to active low.
+ - vsync-active: Vertical synchronization polarity. Defaults to active low.
+ - pclk-sample: Pixel clock polarity. Defaults to output on the falling edge.
+
+ If none of hsync-active, vsync-active and pclk-sample is specified the
+ endpoint will use embedded BT.656 synchronization.
+
+
Example:
hdmi_receiver@4c {
diff --git a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c
index fd0c646..63f036f 100644
--- a/drivers/media/i2c/adv7604.c
+++ b/drivers/media/i2c/adv7604.c
@@ -41,6 +41,7 @@
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-dv-timings.h>
+#include <media/v4l2-of.h>
static int debug;
module_param(debug, int, 0644);
@@ -2679,6 +2680,37 @@ MODULE_DEVICE_TABLE(of, adv7604_of_id);
static int adv7604_parse_dt(struct adv7604_state *state)
{
+ struct v4l2_of_endpoint bus_cfg;
+ struct device_node *endpoint;
+ struct device_node *np;
+ unsigned int flags;
+
+ np = state->i2c_clients[ADV7604_PAGE_IO]->dev.of_node;
+
+ /* Parse the endpoint. */
+ endpoint = of_graph_get_next_endpoint(np, NULL);
+ if (!endpoint)
+ return -EINVAL;
+
+ v4l2_of_parse_endpoint(endpoint, &bus_cfg);
+ of_node_put(endpoint);
+
+ flags = bus_cfg.bus.parallel.flags;
+
+ if (flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH)
+ state->pdata.inv_hs_pol = 1;
+
+ if (flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH)
+ state->pdata.inv_vs_pol = 1;
+
+ if (flags & V4L2_MBUS_PCLK_SAMPLE_RISING)
+ state->pdata.inv_llc_pol = 1;
+
+ if (bus_cfg.bus_type == V4L2_MBUS_BT656) {
+ state->pdata.insert_av_codes = 1;
+ state->pdata.op_656_range = 1;
+ }
+
/* Disable the interrupt for now as no DT-based board uses it. */
state->pdata.int1_config = ADV7604_INT1_CONFIG_DISABLED;
@@ -2701,9 +2733,7 @@ static int adv7604_parse_dt(struct adv7604_state *state)
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;
--
1.8.3.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 45/49] adv7604: Add DT support
2014-04-17 14:13 ` [PATCH v4 45/49] adv7604: Add DT support Laurent Pinchart
@ 2014-04-17 14:39 ` Sylwester Nawrocki
2014-04-17 14:43 ` Laurent Pinchart
2014-04-17 14:52 ` Sylwester Nawrocki
0 siblings, 2 replies; 6+ messages in thread
From: Sylwester Nawrocki @ 2014-04-17 14:39 UTC (permalink / raw)
To: Laurent Pinchart
Cc: linux-media, Hans Verkuil, Lars-Peter Clausen, devicetree
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
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 45/49] adv7604: Add DT support
2014-04-17 14:39 ` Sylwester Nawrocki
@ 2014-04-17 14:43 ` Laurent Pinchart
2014-04-17 14:52 ` Sylwester Nawrocki
1 sibling, 0 replies; 6+ messages in thread
From: Laurent Pinchart @ 2014-04-17 14:43 UTC (permalink / raw)
To: Sylwester Nawrocki
Cc: linux-media, Hans Verkuil, Lars-Peter Clausen, devicetree
Hi Sylwester,
On Thursday 17 April 2014 16:39:29 Sylwester Nawrocki wrote:
> 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>
Thank you.
> Just one comment below...
[snip]
> > 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 ?
Sure, of course. I'll squash patch 49/49 into this one.
> > + { .compatible = "adi,adv7611", .data = &adv7604_chip_info[ADV7611] },
> > + { }
> > +};
> > +MODULE_DEVICE_TABLE(of, adv7604_of_id);
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 47/49] adv7604: Add endpoint properties to DT bindings
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
0 siblings, 0 replies; 6+ messages in thread
From: Sylwester Nawrocki @ 2014-04-17 14:44 UTC (permalink / raw)
To: Laurent Pinchart
Cc: linux-media, Hans Verkuil, Lars-Peter Clausen, devicetree
On 17/04/14 16:13, Laurent Pinchart wrote:
> Add support for the hsync-active, vsync-active and pclk-sample
> properties to the DT bindings and control BT.656 mode implicitly.
>
> 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>
Thanks, the patch looks good to me.
Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
> .../devicetree/bindings/media/i2c/adv7604.txt | 13 +++++++++
> drivers/media/i2c/adv7604.c | 34 ++++++++++++++++++++--
> 2 files changed, 45 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/media/i2c/adv7604.txt b/Documentation/devicetree/bindings/media/i2c/adv7604.txt
> index 2efb48f..c27cede 100644
> --- a/Documentation/devicetree/bindings/media/i2c/adv7604.txt
> +++ b/Documentation/devicetree/bindings/media/i2c/adv7604.txt
> @@ -33,6 +33,19 @@ Optional Properties:
>
> - reset-gpios: Reference to the GPIO connected to the device's reset pin.
>
> +Optional Endpoint Properties:
> +
> + The following three properties are defined in video-interfaces.txt and are
> + valid for source endpoints only.
> +
> + - hsync-active: Horizontal synchronization polarity. Defaults to active low.
> + - vsync-active: Vertical synchronization polarity. Defaults to active low.
> + - pclk-sample: Pixel clock polarity. Defaults to output on the falling edge.
> +
> + If none of hsync-active, vsync-active and pclk-sample is specified the
> + endpoint will use embedded BT.656 synchronization.
> +
> +
> Example:
>
> hdmi_receiver@4c {
> diff --git a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c
> index fd0c646..63f036f 100644
> --- a/drivers/media/i2c/adv7604.c
> +++ b/drivers/media/i2c/adv7604.c
> @@ -41,6 +41,7 @@
> #include <media/v4l2-ctrls.h>
> #include <media/v4l2-device.h>
> #include <media/v4l2-dv-timings.h>
> +#include <media/v4l2-of.h>
>
> static int debug;
> module_param(debug, int, 0644);
> @@ -2679,6 +2680,37 @@ MODULE_DEVICE_TABLE(of, adv7604_of_id);
>
> static int adv7604_parse_dt(struct adv7604_state *state)
> {
> + struct v4l2_of_endpoint bus_cfg;
> + struct device_node *endpoint;
> + struct device_node *np;
> + unsigned int flags;
> +
> + np = state->i2c_clients[ADV7604_PAGE_IO]->dev.of_node;
> +
> + /* Parse the endpoint. */
> + endpoint = of_graph_get_next_endpoint(np, NULL);
> + if (!endpoint)
> + return -EINVAL;
> +
> + v4l2_of_parse_endpoint(endpoint, &bus_cfg);
> + of_node_put(endpoint);
> +
> + flags = bus_cfg.bus.parallel.flags;
> +
> + if (flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH)
> + state->pdata.inv_hs_pol = 1;
> +
> + if (flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH)
> + state->pdata.inv_vs_pol = 1;
> +
> + if (flags & V4L2_MBUS_PCLK_SAMPLE_RISING)
> + state->pdata.inv_llc_pol = 1;
> +
> + if (bus_cfg.bus_type == V4L2_MBUS_BT656) {
> + state->pdata.insert_av_codes = 1;
> + state->pdata.op_656_range = 1;
> + }
> +
> /* Disable the interrupt for now as no DT-based board uses it. */
> state->pdata.int1_config = ADV7604_INT1_CONFIG_DISABLED;
>
> @@ -2701,9 +2733,7 @@ static int adv7604_parse_dt(struct adv7604_state *state)
> 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;
>
--
Regards,
Sylwester
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 45/49] adv7604: Add DT support
2014-04-17 14:39 ` Sylwester Nawrocki
2014-04-17 14:43 ` Laurent Pinchart
@ 2014-04-17 14:52 ` Sylwester Nawrocki
1 sibling, 0 replies; 6+ messages in thread
From: Sylwester Nawrocki @ 2014-04-17 14:52 UTC (permalink / raw)
To: Laurent Pinchart
Cc: linux-media, Hans Verkuil, Lars-Peter Clausen, devicetree
On 17/04/14 16:39, Sylwester Nawrocki wrote:
> 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...
>> > ---
[...]
>> > +static struct of_device_id adv7604_of_id[] = {
>
> Not adding __maybe_unused attribute to this one ?
I missed it's added in the last patch in this series, please ignore
this comment.
--
Regards,
Sylwester
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-04-17 14:52 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1397744000-23967-1-git-send-email-laurent.pinchart@ideasonboard.com>
2014-04-17 14:13 ` [PATCH v4 45/49] adv7604: Add DT support Laurent Pinchart
2014-04-17 14:39 ` Sylwester Nawrocki
2014-04-17 14:43 ` Laurent Pinchart
2014-04-17 14:52 ` Sylwester Nawrocki
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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox