* [PATCH v4 0/3] omapdss: Add video output support for gta04 @ 2014-12-03 21:33 Marek Belisko 2014-12-03 21:33 ` [PATCH v4 1/3] video: omapdss: Add opa362 driver Marek Belisko ` (3 more replies) 0 siblings, 4 replies; 7+ messages in thread From: Marek Belisko @ 2014-12-03 21:33 UTC (permalink / raw) To: linux-arm-kernel changes from v3: - use GPL v2 instead GPL - fix wrong gpios property name in doc and DT - set gpio to NULL if invalid - drop unnecessary header changes from v2: - rename amplifier-opa362.c to encoder-opa362 - drop inversion handlign from driver - add ti,invert-polarity to venc node I also drop devconf1 handling patches because discussion how to properly implement is not yet finished and this part is independent from video driver. changes from v1: - fix opa362 compilation error - fix opa362 DT documentation - move devconf1 definition to omap3.dtsi Marek Belisko (3): video: omapdss: Add opa362 driver Documentation: DT: Add documentation for ti,opa362 bindings arm: dts: omap3-gta04: Add handling for tv output .../devicetree/bindings/video/ti,opa362.txt | 38 +++ arch/arm/boot/dts/omap3-gta04.dtsi | 49 ++++ drivers/video/fbdev/omap2/displays-new/Kconfig | 6 + drivers/video/fbdev/omap2/displays-new/Makefile | 1 + .../fbdev/omap2/displays-new/encoder-opa362.c | 285 +++++++++++++++++++++ 5 files changed, 379 insertions(+) create mode 100644 Documentation/devicetree/bindings/video/ti,opa362.txt create mode 100644 drivers/video/fbdev/omap2/displays-new/encoder-opa362.c -- 1.9.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 1/3] video: omapdss: Add opa362 driver 2014-12-03 21:33 [PATCH v4 0/3] omapdss: Add video output support for gta04 Marek Belisko @ 2014-12-03 21:33 ` Marek Belisko 2014-12-03 21:33 ` [PATCH v4 2/3] Documentation: DT: Add documentation for ti, opa362 bindings Marek Belisko ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Marek Belisko @ 2014-12-03 21:33 UTC (permalink / raw) To: linux-arm-kernel opa362 is amplifier for video and can be connected to the tvout pads of the OMAP3. It has one gpio control for enable/disable of the output (high impedance). Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com> Signed-off-by: Marek Belisko <marek@goldelico.com> --- drivers/video/fbdev/omap2/displays-new/Kconfig | 6 + drivers/video/fbdev/omap2/displays-new/Makefile | 1 + .../fbdev/omap2/displays-new/encoder-opa362.c | 285 +++++++++++++++++++++ 3 files changed, 292 insertions(+) create mode 100644 drivers/video/fbdev/omap2/displays-new/encoder-opa362.c diff --git a/drivers/video/fbdev/omap2/displays-new/Kconfig b/drivers/video/fbdev/omap2/displays-new/Kconfig index e6cfc38..5747101 100644 --- a/drivers/video/fbdev/omap2/displays-new/Kconfig +++ b/drivers/video/fbdev/omap2/displays-new/Kconfig @@ -1,6 +1,12 @@ menu "OMAP Display Device Drivers (new device model)" depends on OMAP2_DSS +config DISPLAY_ENCODER_OPA362 + tristate "OPA362 external analog amplifier" + help + Driver for OPA362 external analog TV amplifier controlled + through a GPIO. + config DISPLAY_ENCODER_TFP410 tristate "TFP410 DPI to DVI Encoder" help diff --git a/drivers/video/fbdev/omap2/displays-new/Makefile b/drivers/video/fbdev/omap2/displays-new/Makefile index 0323a8a..9aa176b 100644 --- a/drivers/video/fbdev/omap2/displays-new/Makefile +++ b/drivers/video/fbdev/omap2/displays-new/Makefile @@ -1,3 +1,4 @@ +obj-$(CONFIG_DISPLAY_ENCODER_OPA362) += encoder-opa362.o obj-$(CONFIG_DISPLAY_ENCODER_TFP410) += encoder-tfp410.o obj-$(CONFIG_DISPLAY_ENCODER_TPD12S015) += encoder-tpd12s015.o obj-$(CONFIG_DISPLAY_CONNECTOR_DVI) += connector-dvi.o diff --git a/drivers/video/fbdev/omap2/displays-new/encoder-opa362.c b/drivers/video/fbdev/omap2/displays-new/encoder-opa362.c new file mode 100644 index 0000000..84a6b33 --- /dev/null +++ b/drivers/video/fbdev/omap2/displays-new/encoder-opa362.c @@ -0,0 +1,285 @@ +/* + * OPA362 analog video amplifier with output/power control + * + * Copyright (C) 2014 Golden Delicious Computers + * Author: H. Nikolaus Schaller <hns@goldelico.com> + * + * based on encoder-tfp410 + * + * Copyright (C) 2013 Texas Instruments + * Author: Tomi Valkeinen <tomi.valkeinen@ti.com> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include <linux/gpio.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/slab.h> +#include <linux/of_gpio.h> + +#include <video/omapdss.h> + +struct panel_drv_data { + struct omap_dss_device dssdev; + struct omap_dss_device *in; + + struct gpio_desc *enable_gpio; + + struct omap_video_timings timings; +}; + +#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev) + +static int opa362_connect(struct omap_dss_device *dssdev, + struct omap_dss_device *dst) +{ + struct panel_drv_data *ddata = to_panel_data(dssdev); + struct omap_dss_device *in = ddata->in; + int r; + + dev_dbg(dssdev->dev, "connect\n"); + + if (omapdss_device_is_connected(dssdev)) + return -EBUSY; + + r = in->ops.atv->connect(in, dssdev); + if (r) + return r; + + dst->src = dssdev; + dssdev->dst = dst; + + return 0; +} + +static void opa362_disconnect(struct omap_dss_device *dssdev, + struct omap_dss_device *dst) +{ + struct panel_drv_data *ddata = to_panel_data(dssdev); + struct omap_dss_device *in = ddata->in; + + dev_dbg(dssdev->dev, "disconnect\n"); + + WARN_ON(!omapdss_device_is_connected(dssdev)); + if (!omapdss_device_is_connected(dssdev)) + return; + + WARN_ON(dst != dssdev->dst); + if (dst != dssdev->dst) + return; + + dst->src = NULL; + dssdev->dst = NULL; + + in->ops.atv->disconnect(in, &ddata->dssdev); +} + +static int opa362_enable(struct omap_dss_device *dssdev) +{ + struct panel_drv_data *ddata = to_panel_data(dssdev); + struct omap_dss_device *in = ddata->in; + int r; + + dev_dbg(dssdev->dev, "enable\n"); + + if (!omapdss_device_is_connected(dssdev)) + return -ENODEV; + + if (omapdss_device_is_enabled(dssdev)) + return 0; + + in->ops.atv->set_timings(in, &ddata->timings); + + r = in->ops.atv->enable(in); + if (r) + return r; + + if (ddata->enable_gpio) + gpiod_set_value_cansleep(ddata->enable_gpio, 1); + + dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; + + return 0; +} + +static void opa362_disable(struct omap_dss_device *dssdev) +{ + struct panel_drv_data *ddata = to_panel_data(dssdev); + struct omap_dss_device *in = ddata->in; + + dev_dbg(dssdev->dev, "disable\n"); + + if (!omapdss_device_is_enabled(dssdev)) + return; + + if (ddata->enable_gpio) + gpiod_set_value_cansleep(ddata->enable_gpio, 0); + + in->ops.atv->disable(in); + + dssdev->state = OMAP_DSS_DISPLAY_DISABLED; +} + +static void opa362_set_timings(struct omap_dss_device *dssdev, + struct omap_video_timings *timings) +{ + struct panel_drv_data *ddata = to_panel_data(dssdev); + struct omap_dss_device *in = ddata->in; + + dev_dbg(dssdev->dev, "set_timings\n"); + + ddata->timings = *timings; + dssdev->panel.timings = *timings; + + in->ops.atv->set_timings(in, timings); +} + +static void opa362_get_timings(struct omap_dss_device *dssdev, + struct omap_video_timings *timings) +{ + struct panel_drv_data *ddata = to_panel_data(dssdev); + + dev_dbg(dssdev->dev, "get_timings\n"); + + *timings = ddata->timings; +} + +static int opa362_check_timings(struct omap_dss_device *dssdev, + struct omap_video_timings *timings) +{ + struct panel_drv_data *ddata = to_panel_data(dssdev); + struct omap_dss_device *in = ddata->in; + + dev_dbg(dssdev->dev, "check_timings\n"); + + return in->ops.atv->check_timings(in, timings); +} + +static void opa362_set_type(struct omap_dss_device *dssdev, + enum omap_dss_venc_type type) +{ + /* we can only drive a COMPOSITE output */ + WARN_ON(type != OMAP_DSS_VENC_TYPE_COMPOSITE); + +} + +static const struct omapdss_atv_ops opa362_atv_ops = { + .connect = opa362_connect, + .disconnect = opa362_disconnect, + + .enable = opa362_enable, + .disable = opa362_disable, + + .check_timings = opa362_check_timings, + .set_timings = opa362_set_timings, + .get_timings = opa362_get_timings, + + .set_type = opa362_set_type, +}; + +static int opa362_probe(struct platform_device *pdev) +{ + struct device_node *node = pdev->dev.of_node; + struct panel_drv_data *ddata; + struct omap_dss_device *dssdev, *in; + struct gpio_desc *gpio; + int r; + + dev_dbg(&pdev->dev, "probe\n"); + + if (node == NULL) { + dev_err(&pdev->dev, "Unable to find device tree\n"); + return -EINVAL; + } + + ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); + if (!ddata) + return -ENOMEM; + + platform_set_drvdata(pdev, ddata); + + gpio = devm_gpiod_get(&pdev->dev, "enable"); + if (IS_ERR(gpio)) { + if (PTR_ERR(gpio) != -ENOENT) + return PTR_ERR(gpio); + + gpio = NULL; + } else { + gpiod_direction_output(gpio, 0); + } + + ddata->enable_gpio = gpio; + + in = omapdss_of_find_source_for_first_ep(node); + if (IS_ERR(in)) { + dev_err(&pdev->dev, "failed to find video source\n"); + return PTR_ERR(in); + } + + ddata->in = in; + + dssdev = &ddata->dssdev; + dssdev->ops.atv = &opa362_atv_ops; + dssdev->dev = &pdev->dev; + dssdev->type = OMAP_DISPLAY_TYPE_VENC; + dssdev->output_type = OMAP_DISPLAY_TYPE_VENC; + dssdev->owner = THIS_MODULE; + + r = omapdss_register_output(dssdev); + if (r) { + dev_err(&pdev->dev, "Failed to register output\n"); + goto err_reg; + } + + return 0; +err_reg: + omap_dss_put_device(ddata->in); + return r; +} + +static int __exit opa362_remove(struct platform_device *pdev) +{ + struct panel_drv_data *ddata = platform_get_drvdata(pdev); + struct omap_dss_device *dssdev = &ddata->dssdev; + struct omap_dss_device *in = ddata->in; + + omapdss_unregister_output(&ddata->dssdev); + + WARN_ON(omapdss_device_is_enabled(dssdev)); + if (omapdss_device_is_enabled(dssdev)) + opa362_disable(dssdev); + + WARN_ON(omapdss_device_is_connected(dssdev)); + if (omapdss_device_is_connected(dssdev)) + opa362_disconnect(dssdev, dssdev->dst); + + omap_dss_put_device(in); + + return 0; +} + +static const struct of_device_id opa362_of_match[] = { + { .compatible = "omapdss,ti,opa362", }, + {}, +}; +MODULE_DEVICE_TABLE(of, opa362_of_match); + +static struct platform_driver opa362_driver = { + .probe = opa362_probe, + .remove = __exit_p(opa362_remove), + .driver = { + .name = "amplifier-opa362", + .owner = THIS_MODULE, + .of_match_table = opa362_of_match, + .suppress_bind_attrs = true, + }, +}; + +module_platform_driver(opa362_driver); + +MODULE_AUTHOR("H. Nikolaus Schaller <hns@goldelico.com>"); +MODULE_DESCRIPTION("OPA362 analog video amplifier with output/power control"); +MODULE_LICENSE("GPL v2"); -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 2/3] Documentation: DT: Add documentation for ti, opa362 bindings 2014-12-03 21:33 [PATCH v4 0/3] omapdss: Add video output support for gta04 Marek Belisko 2014-12-03 21:33 ` [PATCH v4 1/3] video: omapdss: Add opa362 driver Marek Belisko @ 2014-12-03 21:33 ` Marek Belisko 2014-12-03 21:33 ` [PATCH v4 3/3] arm: dts: omap3-gta04: Add handling for tv output Marek Belisko 2015-01-10 14:13 ` [PATCH v4 0/3] omapdss: Add video output support for gta04 Belisko Marek 3 siblings, 0 replies; 7+ messages in thread From: Marek Belisko @ 2014-12-03 21:33 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Marek Belisko <marek@goldelico.com> --- .../devicetree/bindings/video/ti,opa362.txt | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Documentation/devicetree/bindings/video/ti,opa362.txt diff --git a/Documentation/devicetree/bindings/video/ti,opa362.txt b/Documentation/devicetree/bindings/video/ti,opa362.txt new file mode 100644 index 0000000..f96083c --- /dev/null +++ b/Documentation/devicetree/bindings/video/ti,opa362.txt @@ -0,0 +1,38 @@ +OPA362 analog video amplifier + +Required properties: +- compatible: "ti,opa362" +- enable-gpios: enable/disable output gpio + +Required node: +- Video port 0 for opa362 input +- Video port 1 for opa362 output + +Example: + +tv_amp: opa362 { + compatible = "ti,opa362"; + enable-gpios = <&gpio1 23 0>; /* GPIO to enable video out amplifier */ + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port at 0 { + reg = <0>; + opa_in: endpoint at 0 { + remote-endpoint = <&venc_out>; + }; + }; + + port at 1 { + reg = <1>; + opa_out: endpoint at 0 { + remote-endpoint = <&tv_connector_in>; + }; + }; + }; +}; + + + -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 3/3] arm: dts: omap3-gta04: Add handling for tv output 2014-12-03 21:33 [PATCH v4 0/3] omapdss: Add video output support for gta04 Marek Belisko 2014-12-03 21:33 ` [PATCH v4 1/3] video: omapdss: Add opa362 driver Marek Belisko 2014-12-03 21:33 ` [PATCH v4 2/3] Documentation: DT: Add documentation for ti, opa362 bindings Marek Belisko @ 2014-12-03 21:33 ` Marek Belisko 2015-01-13 10:11 ` Tomi Valkeinen 2015-01-10 14:13 ` [PATCH v4 0/3] omapdss: Add video output support for gta04 Belisko Marek 3 siblings, 1 reply; 7+ messages in thread From: Marek Belisko @ 2014-12-03 21:33 UTC (permalink / raw) To: linux-arm-kernel Add handling for gta04 tv out chain: venc -> opa362 -> svideo Use invert-polarity in venc node because opa362 is doing polarity inversion also. Signed-off-by: Marek Belisko <marek@goldelico.com> --- arch/arm/boot/dts/omap3-gta04.dtsi | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot/dts/omap3-gta04.dtsi index fd34f91..a6e995b 100644 --- a/arch/arm/boot/dts/omap3-gta04.dtsi +++ b/arch/arm/boot/dts/omap3-gta04.dtsi @@ -83,6 +83,41 @@ compatible = "usb-nop-xceiv"; reset-gpios = <&gpio6 14 GPIO_ACTIVE_LOW>; }; + + tv0: connector at 1 { + compatible = "svideo-connector"; + label = "tv"; + + port { + tv_connector_in: endpoint { + remote-endpoint = <&opa_out>; + }; + }; + }; + + tv_amp: opa362 { + compatible = "ti,opa362"; + enable-gpios = <&gpio1 23 0>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port at 0 { + reg = <0>; + opa_in: endpoint at 0 { + remote-endpoint = <&venc_out>; + }; + }; + + port at 1 { + reg = <1>; + opa_out: endpoint at 0 { + remote-endpoint = <&tv_connector_in>; + }; + }; + }; + }; }; &omap3_pmx_core { @@ -396,6 +431,20 @@ }; }; +&venc { + status = "okay"; + + vdda-supply = <&vdac>; + + port { + venc_out: endpoint { + remote-endpoint = <&opa_in>; + ti,channels = <2>; + ti,invert-polarity; + }; + }; +}; + &gpmc { ranges = <0 0 0x30000000 0x04>; /* CS0: NAND */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 3/3] arm: dts: omap3-gta04: Add handling for tv output 2014-12-03 21:33 ` [PATCH v4 3/3] arm: dts: omap3-gta04: Add handling for tv output Marek Belisko @ 2015-01-13 10:11 ` Tomi Valkeinen 2015-01-13 15:56 ` Tony Lindgren 0 siblings, 1 reply; 7+ messages in thread From: Tomi Valkeinen @ 2015-01-13 10:11 UTC (permalink / raw) To: linux-arm-kernel On 03/12/14 23:33, Marek Belisko wrote: > Add handling for gta04 tv out chain: > venc -> opa362 -> svideo > > Use invert-polarity in venc node because opa362 > is doing polarity inversion also. > > Signed-off-by: Marek Belisko <marek@goldelico.com> > --- > arch/arm/boot/dts/omap3-gta04.dtsi | 49 ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 49 insertions(+) Looks fine to me. Tony, do you want to pick this up? I can take the first two patches via fbdev. Tomi -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: OpenPGP digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150113/12913704/attachment.sig> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 3/3] arm: dts: omap3-gta04: Add handling for tv output 2015-01-13 10:11 ` Tomi Valkeinen @ 2015-01-13 15:56 ` Tony Lindgren 0 siblings, 0 replies; 7+ messages in thread From: Tony Lindgren @ 2015-01-13 15:56 UTC (permalink / raw) To: linux-arm-kernel * Tomi Valkeinen <tomi.valkeinen@ti.com> [150113 02:14]: > On 03/12/14 23:33, Marek Belisko wrote: > > Add handling for gta04 tv out chain: > > venc -> opa362 -> svideo > > > > Use invert-polarity in venc node because opa362 > > is doing polarity inversion also. > > > > Signed-off-by: Marek Belisko <marek@goldelico.com> > > --- > > arch/arm/boot/dts/omap3-gta04.dtsi | 49 ++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 49 insertions(+) > > Looks fine to me. > > Tony, do you want to pick this up? I can take the first two patches via > fbdev. OK will pick the dtsi change. Thanks, Tony ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 0/3] omapdss: Add video output support for gta04 2014-12-03 21:33 [PATCH v4 0/3] omapdss: Add video output support for gta04 Marek Belisko ` (2 preceding siblings ...) 2014-12-03 21:33 ` [PATCH v4 3/3] arm: dts: omap3-gta04: Add handling for tv output Marek Belisko @ 2015-01-10 14:13 ` Belisko Marek 3 siblings, 0 replies; 7+ messages in thread From: Belisko Marek @ 2015-01-10 14:13 UTC (permalink / raw) To: linux-arm-kernel Tomi can you please pick up this series for 3.20 release? Thanks On Wed, Dec 3, 2014 at 10:33 PM, Marek Belisko <marek@goldelico.com> wrote: > changes from v3: > - use GPL v2 instead GPL > - fix wrong gpios property name in doc and DT > - set gpio to NULL if invalid > - drop unnecessary header > > changes from v2: > - rename amplifier-opa362.c to encoder-opa362 > - drop inversion handlign from driver > - add ti,invert-polarity to venc node > > I also drop devconf1 handling patches because discussion how to > properly implement is not yet finished and this part is independent > from video driver. > > changes from v1: > - fix opa362 compilation error > - fix opa362 DT documentation > - move devconf1 definition to omap3.dtsi > Marek Belisko (3): > video: omapdss: Add opa362 driver > Documentation: DT: Add documentation for ti,opa362 bindings > arm: dts: omap3-gta04: Add handling for tv output > > .../devicetree/bindings/video/ti,opa362.txt | 38 +++ > arch/arm/boot/dts/omap3-gta04.dtsi | 49 ++++ > drivers/video/fbdev/omap2/displays-new/Kconfig | 6 + > drivers/video/fbdev/omap2/displays-new/Makefile | 1 + > .../fbdev/omap2/displays-new/encoder-opa362.c | 285 +++++++++++++++++++++ > 5 files changed, 379 insertions(+) > create mode 100644 Documentation/devicetree/bindings/video/ti,opa362.txt > create mode 100644 drivers/video/fbdev/omap2/displays-new/encoder-opa362.c > > -- > 1.9.1 > BR, marek -- as simple and primitive as possible ------------------------------------------------- Marek Belisko - OPEN-NANDRA Freelance Developer Ruska Nova Ves 219 | Presov, 08005 Slovak Republic Tel: +421 915 052 184 skype: marekwhite twitter: #opennandra web: http://open-nandra.com ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-01-13 15:56 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-12-03 21:33 [PATCH v4 0/3] omapdss: Add video output support for gta04 Marek Belisko 2014-12-03 21:33 ` [PATCH v4 1/3] video: omapdss: Add opa362 driver Marek Belisko 2014-12-03 21:33 ` [PATCH v4 2/3] Documentation: DT: Add documentation for ti, opa362 bindings Marek Belisko 2014-12-03 21:33 ` [PATCH v4 3/3] arm: dts: omap3-gta04: Add handling for tv output Marek Belisko 2015-01-13 10:11 ` Tomi Valkeinen 2015-01-13 15:56 ` Tony Lindgren 2015-01-10 14:13 ` [PATCH v4 0/3] omapdss: Add video output support for gta04 Belisko Marek
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).