* [PATCH v2 46/48] adv7604: Add DT support [not found] <1394493359-14115-1-git-send-email-laurent.pinchart@ideasonboard.com> @ 2014-03-10 23:15 ` Laurent Pinchart 2014-04-17 10:59 ` Sylwester Nawrocki 0 siblings, 1 reply; 5+ messages in thread From: Laurent Pinchart @ 2014-03-10 23:15 UTC (permalink / raw) To: linux-media; +Cc: Hans Verkuil, Lars-Peter Clausen, devicetree Parse the device tree node to populate platform data. Cc: devicetree@vger.kernel.org Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- .../devicetree/bindings/media/i2c/adv7604.txt | 56 +++++++++++++ drivers/media/i2c/adv7604.c | 92 ++++++++++++++++++---- 2 files changed, 134 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..0845c50 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/adv7604.txt @@ -0,0 +1,56 @@ +* 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. + +Required Properties: + + - compatible: Must contain one of the following + - "adi,adv7604" for the ADV7604 + - "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. + +Optional Properties: + + - reset-gpios: Reference to the GPIO connected to the device's reset pin. + + - adi,default-input: Index of the input to be configured as default. Valid + values are 0..5 for the ADV7604 and 0 for the ADV7611. + + - adi,disable-power-down: Boolean property. When set forces the device to + ignore the power-down pin. The property is valid for the ADV7604 only as + the ADV7611 has no power-down pin. + + - adi,disable-cable-reset: Boolean property. When set disables the HDMI + receiver automatic reset when the HDMI cable is unplugged. + +Example: + + hdmi_receiver@4c { + compatible = "adi,adv7611"; + reg = <0x4c>; + + reset-gpios = <&ioexp 0 GPIO_ACTIVE_LOW>; + hpd-gpios = <&ioexp 2 GPIO_ACTIVE_HIGH>; + + adi,default-input = <0>; + + #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 cce140c..de44213 100644 --- a/drivers/media/i2c/adv7604.c +++ b/drivers/media/i2c/adv7604.c @@ -2626,13 +2626,70 @@ 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,adv7604", .data = &adv7604_chip_info[ADV7604] }, + { .compatible = "adi,adv7611", .data = &adv7604_chip_info[ADV7611] }, + { } +}; +MODULE_DEVICE_TABLE(of, adv7604_of_id); + +static int adv7604_parse_dt(struct adv7604_state *state) +{ + struct device_node *np; + int ret; + + np = state->i2c_clients[ADV7604_PAGE_IO]->dev.of_node; + + state->pdata.disable_pwrdnb = + of_property_read_bool(np, "adi,disable-power-down"); + state->pdata.disable_cable_det_rst = + of_property_read_bool(np, "adi,disable-cable-reset"); + + ret = of_property_read_u32(np, "adi,default-input", + &state->pdata.default_input); + if (ret < 0) + state->pdata.default_input = -1; + + /* 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; + + /* HACK: Hardcode the remaining platform data fields. */ + 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; + + 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; @@ -2651,19 +2708,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) { @@ -2762,7 +2832,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; @@ -2836,21 +2906,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] 5+ messages in thread
* Re: [PATCH v2 46/48] adv7604: Add DT support 2014-03-10 23:15 ` [PATCH v2 46/48] adv7604: Add DT support Laurent Pinchart @ 2014-04-17 10:59 ` Sylwester Nawrocki 2014-04-17 12:36 ` Laurent Pinchart 0 siblings, 1 reply; 5+ messages in thread From: Sylwester Nawrocki @ 2014-04-17 10:59 UTC (permalink / raw) To: Laurent Pinchart Cc: linux-media, Hans Verkuil, Lars-Peter Clausen, devicetree Hi Laurent. On 11/03/14 00:15, Laurent Pinchart wrote: > Parse the device tree node to populate platform data. > > Cc: devicetree@vger.kernel.org > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > .../devicetree/bindings/media/i2c/adv7604.txt | 56 +++++++++++++ > drivers/media/i2c/adv7604.c | 92 ++++++++++++++++++---- > 2 files changed, 134 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..0845c50 > --- /dev/null > +++ b/Documentation/devicetree/bindings/media/i2c/adv7604.txt > @@ -0,0 +1,56 @@ > +* 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. > + > +Required Properties: > + > + - compatible: Must contain one of the following > + - "adi,adv7604" for the ADV7604 > + - "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. > + > +Optional Properties: > + > + - reset-gpios: Reference to the GPIO connected to the device's reset pin. > + > + - adi,default-input: Index of the input to be configured as default. Valid > + values are 0..5 for the ADV7604 and 0 for the ADV7611. I have some doubts about this property. Firstly, it seems it is not needed for ADV7611 since it is always 0 for that device ? Why can't we hard code in the driver some default input ? And which inputs it refers to ? HDMI inputs A..D + analog ? If we keep this property I think exact mapping of numbers to inputs should be included in description of this property. > + - adi,disable-power-down: Boolean property. When set forces the device to > + ignore the power-down pin. The property is valid for the ADV7604 only as > + the ADV7611 has no power-down pin. Does it refer to the !PWRDWN pin ? If so I would replace "power-down" with PWRDWN, so it is clear what we're talking about when someone looks only at the datasheet. > + - adi,disable-cable-reset: Boolean property. When set disables the HDMI > + receiver automatic reset when the HDMI cable is unplugged. Couldn't this be configured from user space with some default assumed in the driver ? > +Example: > + > + hdmi_receiver@4c { > + compatible = "adi,adv7611"; > + reg = <0x4c>; > + > + reset-gpios = <&ioexp 0 GPIO_ACTIVE_LOW>; > + hpd-gpios = <&ioexp 2 GPIO_ACTIVE_HIGH>; > + > + adi,default-input = <0>; > + > + #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 cce140c..de44213 100644 > --- a/drivers/media/i2c/adv7604.c > +++ b/drivers/media/i2c/adv7604.c > @@ -2626,13 +2626,70 @@ 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,adv7604", .data = &adv7604_chip_info[ADV7604] }, > + { .compatible = "adi,adv7611", .data = &adv7604_chip_info[ADV7611] }, > + { } > +}; > +MODULE_DEVICE_TABLE(of, adv7604_of_id); > + > +static int adv7604_parse_dt(struct adv7604_state *state) > +{ > + struct device_node *np; > + int ret; > + > + np = state->i2c_clients[ADV7604_PAGE_IO]->dev.of_node; > + > + state->pdata.disable_pwrdnb = > + of_property_read_bool(np, "adi,disable-power-down"); > + state->pdata.disable_cable_det_rst = > + of_property_read_bool(np, "adi,disable-cable-reset"); > + > + ret = of_property_read_u32(np, "adi,default-input", > + &state->pdata.default_input); > + if (ret < 0) > + state->pdata.default_input = -1; > + > + /* 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; > + > + /* HACK: Hardcode the remaining platform data fields. */ > + 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; > + > + 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; > @@ -2651,19 +2708,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) { > @@ -2762,7 +2832,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; > @@ -2836,21 +2906,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), of_match_ptr() isn't necessary here. > }, > .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] 5+ messages in thread
* Re: [PATCH v2 46/48] adv7604: Add DT support 2014-04-17 10:59 ` Sylwester Nawrocki @ 2014-04-17 12:36 ` Laurent Pinchart 2014-04-17 13:08 ` Laurent Pinchart 0 siblings, 1 reply; 5+ messages in thread From: Laurent Pinchart @ 2014-04-17 12:36 UTC (permalink / raw) To: Sylwester Nawrocki Cc: linux-media, Hans Verkuil, Lars-Peter Clausen, devicetree Hi Sylwester, Thank you for the review. On Thursday 17 April 2014 12:59:22 Sylwester Nawrocki wrote: > On 11/03/14 00:15, Laurent Pinchart wrote: > > Parse the device tree node to populate platform data. > > > > Cc: devicetree@vger.kernel.org > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > > > > .../devicetree/bindings/media/i2c/adv7604.txt | 56 +++++++++++++ > > drivers/media/i2c/adv7604.c | 92 +++++++++++++---- > > 2 files changed, 134 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..0845c50 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/media/i2c/adv7604.txt > > @@ -0,0 +1,56 @@ > > +* 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. > > + > > +Required Properties: > > + > > + - compatible: Must contain one of the following > > + - "adi,adv7604" for the ADV7604 > > + - "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. > > + > > +Optional Properties: > > + > > + - reset-gpios: Reference to the GPIO connected to the device's reset > > pin. + > > + - adi,default-input: Index of the input to be configured as default. > > Valid > > + values are 0..5 for the ADV7604 and 0 for the ADV7611. > > I have some doubts about this property. Firstly, it seems it is not needed > for ADV7611 since it is always 0 for that device ? > Why can't we hard code in the driver some default input ? I've thought about hardcoding a default input in the driver as well, but Hans wasn't really keen on the idea. Hans, could you please comment on this ? > And which inputs it refers to ? HDMI inputs A..D + analog ? If we keep this > property I think exact mapping of numbers to inputs should be included > in description of this property. > > > + - adi,disable-power-down: Boolean property. When set forces the device > > to > > + ignore the power-down pin. The property is valid for the ADV7604 only > > as > > + the ADV7611 has no power-down pin. > > Does it refer to the !PWRDWN pin ? If so I would replace "power-down" with > PWRDWN, so it is clear what we're talking about when someone looks only > at the datasheet. > > > + - adi,disable-cable-reset: Boolean property. When set disables the HDMI > > + receiver automatic reset when the HDMI cable is unplugged. > > Couldn't this be configured from user space with some default assumed in the > driver ? Good question. I'm not sure what the exact use case for this is. Let's be careful not to introduce unneeded properties, I'll drop those two properties for now, we can implement support for the features later when needed. > > +Example: > > + > > + hdmi_receiver@4c { > > + compatible = "adi,adv7611"; > > + reg = <0x4c>; > > + > > + reset-gpios = <&ioexp 0 GPIO_ACTIVE_LOW>; > > + hpd-gpios = <&ioexp 2 GPIO_ACTIVE_HIGH>; > > + > > + adi,default-input = <0>; > > + > > + #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 cce140c..de44213 100644 > > --- a/drivers/media/i2c/adv7604.c > > +++ b/drivers/media/i2c/adv7604.c [snip] > > @@ -2836,21 +2906,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), > > of_match_ptr() isn't necessary here. Thanks, will fix in v3. > > }, > > .probe = adv7604_probe, > > .remove = adv7604_remove, > > - .id_table = adv7604_id, > > + .id_table = adv7604_i2c_id, > > }; > > > > module_i2c_driver(adv7604_driver); -- Regards, Laurent Pinchart ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 46/48] adv7604: Add DT support 2014-04-17 12:36 ` Laurent Pinchart @ 2014-04-17 13:08 ` Laurent Pinchart 2014-04-17 13:41 ` Sylwester Nawrocki 0 siblings, 1 reply; 5+ messages in thread From: Laurent Pinchart @ 2014-04-17 13:08 UTC (permalink / raw) To: Sylwester Nawrocki Cc: linux-media, Hans Verkuil, Lars-Peter Clausen, devicetree Hi Sylwester, On Thursday 17 April 2014 14:36:32 Laurent Pinchart wrote: > On Thursday 17 April 2014 12:59:22 Sylwester Nawrocki wrote: > > On 11/03/14 00:15, Laurent Pinchart wrote: > > > Parse the device tree node to populate platform data. > > > > > > Cc: devicetree@vger.kernel.org > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > > --- > > > > > > .../devicetree/bindings/media/i2c/adv7604.txt | 56 +++++++++++++ > > > drivers/media/i2c/adv7604.c | 92 > > > +++++++++++++---- > > > 2 files changed, 134 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..0845c50 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/media/i2c/adv7604.txt > > > @@ -0,0 +1,56 @@ > > > +* 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. > > > + > > > +Required Properties: > > > + > > > + - compatible: Must contain one of the following > > > + - "adi,adv7604" for the ADV7604 > > > + - "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. > > > + > > > +Optional Properties: > > > + > > > + - reset-gpios: Reference to the GPIO connected to the device's reset > > > pin. + > > > + - adi,default-input: Index of the input to be configured as default. > > > Valid > > > + values are 0..5 for the ADV7604 and 0 for the ADV7611. > > > > I have some doubts about this property. Firstly, it seems it is not needed > > for ADV7611 since it is always 0 for that device ? > > Why can't we hard code in the driver some default input ? > > I've thought about hardcoding a default input in the driver as well, but > Hans wasn't really keen on the idea. Hans, could you please comment on this > ? > > And which inputs it refers to ? HDMI inputs A..D + analog ? If we keep > > this > > property I think exact mapping of numbers to inputs should be included > > in description of this property. > > > > > + - adi,disable-power-down: Boolean property. When set forces the > > > device > > > to > > > + ignore the power-down pin. The property is valid for the ADV7604 > > > only > > > as > > > + the ADV7611 has no power-down pin. > > > > Does it refer to the !PWRDWN pin ? If so I would replace "power-down" with > > PWRDWN, so it is clear what we're talking about when someone looks only > > at the datasheet. > > > > > + - adi,disable-cable-reset: Boolean property. When set disables the > > > HDMI > > > + receiver automatic reset when the HDMI cable is unplugged. > > > > Couldn't this be configured from user space with some default assumed in > > the driver ? > > Good question. I'm not sure what the exact use case for this is. > > Let's be careful not to introduce unneeded properties, I'll drop those two > properties for now, we can implement support for the features later when > needed. > > > > +Example: > > > + > > > + hdmi_receiver@4c { > > > + compatible = "adi,adv7611"; > > > + reg = <0x4c>; > > > + > > > + reset-gpios = <&ioexp 0 GPIO_ACTIVE_LOW>; > > > + hpd-gpios = <&ioexp 2 GPIO_ACTIVE_HIGH>; > > > + > > > + adi,default-input = <0>; > > > + > > > + #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 cce140c..de44213 100644 > > > --- a/drivers/media/i2c/adv7604.c > > > +++ b/drivers/media/i2c/adv7604.c > > [snip] > > > > @@ -2836,21 +2906,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), > > > > of_match_ptr() isn't necessary here. > > Thanks, will fix in v3. On second thought, as the driver has non-DT users, keeping of_match_ptr() and marking the table as __maybe_unused will optimize the table out if neither CONFIG_OF nor CONFIG_MODULE is set. I'd thus prefer keeping of_match_ptr(). > > > }, > > > .probe = adv7604_probe, > > > .remove = adv7604_remove, > > > > > > - .id_table = adv7604_id, > > > + .id_table = adv7604_i2c_id, > > > > > > }; > > > > > > module_i2c_driver(adv7604_driver); -- Regards, Laurent Pinchart ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 46/48] adv7604: Add DT support 2014-04-17 13:08 ` Laurent Pinchart @ 2014-04-17 13:41 ` Sylwester Nawrocki 0 siblings, 0 replies; 5+ messages in thread From: Sylwester Nawrocki @ 2014-04-17 13:41 UTC (permalink / raw) To: Laurent Pinchart Cc: linux-media, Hans Verkuil, Lars-Peter Clausen, devicetree On 17/04/14 15:08, Laurent Pinchart wrote: >>>> static struct i2c_driver adv7604_driver = { >>>> > > > >>>> > > > .driver = { >>>> > > > >>>> > > > .owner = THIS_MODULE, >>>> > > > .name = "adv7604", >>>> > > > >>>> > > > + .of_match_table = of_match_ptr(adv7604_of_id), >>> > > >>> > > of_match_ptr() isn't necessary here. >> > >> > Thanks, will fix in v3. > > On second thought, as the driver has non-DT users, keeping of_match_ptr() and > marking the table as __maybe_unused will optimize the table out if neither > CONFIG_OF nor CONFIG_MODULE is set. I'd thus prefer keeping of_match_ptr(). Yes, itsounds like a good idea to me. This way we avoid unpleasant #ifdefs and do not increase size of the module for non-dt users. -- Regards, Sylwester ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-04-17 13:41 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1394493359-14115-1-git-send-email-laurent.pinchart@ideasonboard.com> 2014-03-10 23:15 ` [PATCH v2 46/48] adv7604: Add DT support Laurent Pinchart 2014-04-17 10:59 ` Sylwester Nawrocki 2014-04-17 12:36 ` Laurent Pinchart 2014-04-17 13:08 ` Laurent Pinchart 2014-04-17 13:41 ` Sylwester Nawrocki
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).