[PATCH RFC v3 5/7] drm/i2c: tda998x: Remove include/sound/tda998x.h and fix graph parsing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Move struct tda998x_audio definition to tda998x_drv.c and remove
include/sound/tda998x.h. There is no external use for struct
tda998x_audio.

Fix graph parsing to allow ports to be inside a separate "ports"-node as
specified in Documentation/devicetree/bindings/graph.txt.

Signed-off-by: Jyri Sarha <jsarha@xxxxxx>
---
 drivers/gpu/drm/i2c/tda998x_drv.c | 59 +++++++++++++++++++++------------------
 include/sound/tda998x.h           |  8 ------
 2 files changed, 32 insertions(+), 35 deletions(-)
 delete mode 100644 include/sound/tda998x.h

diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
index 0952eac..4dc2dc0 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -27,10 +27,14 @@
 #include <drm/drm_edid.h>
 #include <drm/drm_of.h>
 #include <drm/i2c/tda998x.h>
-#include <sound/tda998x.h>
 
 #define DBG(fmt, ...) DRM_DEBUG(fmt"\n", ##__VA_ARGS__)
 
+struct tda998x_audio {
+	u8 ports[2];			/* AP value */
+	u8 port_types[2];		/* AFMT_xxx */
+};
+
 struct tda998x_priv {
 	struct i2c_client *cec;
 	struct i2c_client *hdmi;
@@ -1240,9 +1244,10 @@ static int tda998x_parse_ports(struct tda998x_priv *priv,
 {
 	struct device_node *of_port;
 	const char *port_type;
-	int ret, audio_index, reg, afmt;
+	int ret, audio_index, reg, afmt, rgb_initialized;
 
 	audio_index = 0;
+	rgb_initialized = 0;
 	for_each_child_of_node(np, of_port) {
 		if (!of_port->name
 		 || of_node_cmp(of_port->name, "port") != 0)
@@ -1252,11 +1257,17 @@ static int tda998x_parse_ports(struct tda998x_priv *priv,
 		if (ret < 0)
 			continue;
 		ret = of_property_read_u32(of_port, "reg", &reg);
+		if (ret < 0) {
+			dev_err(&priv->hdmi->dev, "missing reg for %s\n",
+				port_type);
+			return ret;
+		}
 		if (strcmp(port_type, "rgb") == 0) {
 			if (!ret) {		/* video reg is optional */
 				priv->vip_cntrl_0 = reg >> 16;
 				priv->vip_cntrl_1 = reg >> 8;
 				priv->vip_cntrl_2 = reg;
+				rgb_initialized = 1;
 			}
 			continue;
 		}
@@ -1266,11 +1277,6 @@ static int tda998x_parse_ports(struct tda998x_priv *priv,
 			afmt = AFMT_SPDIF;
 		else
 			continue;
-		if (ret < 0) {
-			dev_err(&priv->hdmi->dev, "missing reg for %s\n",
-				port_type);
-			return ret;
-		}
 		if (audio_index >= ARRAY_SIZE(priv->audio.ports)) {
 			dev_err(&priv->hdmi->dev, "too many audio ports\n");
 			break;
@@ -1279,13 +1285,13 @@ static int tda998x_parse_ports(struct tda998x_priv *priv,
 		priv->audio.port_types[audio_index] = afmt;
 		audio_index++;
 	}
-	return 0;
+	return rgb_initialized;
 }
 
 static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)
 {
 	struct device_node *np = client->dev.of_node;
-	struct device_node *of_port;
+	struct device_node *ports;
 	u32 video;
 	int rev_lo, rev_hi, ret;
 	unsigned short cec_addr;
@@ -1392,24 +1398,15 @@ static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)
 
 	/* get the device tree parameters */
 	if (np) {
-		of_port = of_get_child_by_name(np, "port");
-		if (of_port) {				/* graph of ports */
-			of_node_put(of_port);
-			ret = tda998x_parse_ports(priv, np);
-			if (ret < 0)
-				goto fail;
-
-			/* initialize the default audio configuration */
-			if (priv->audio.ports[0]) {
-				priv->params.audio_cfg = priv->audio.ports[0];
-				priv->params.audio_format =
-						priv->audio.port_types[0];
-				priv->params.audio_clk_cfg =
-					priv->params.audio_format ==
-							AFMT_SPDIF ? 0 : 1;
-			}
-		} else {
-
+		ports = of_get_child_by_name(np, "ports");
+		if (!ports)
+			ports = of_node_get(np);
+		/* graph of ports */
+		ret = tda998x_parse_ports(priv, ports);
+		of_node_put(ports);
+		if (ret < 0)
+			goto fail;
+		if (ret == 0) {
 			/* optional video properties */
 			ret = of_property_read_u32(np, "video-ports", &video);
 			if (ret == 0) {
@@ -1418,6 +1415,14 @@ static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)
 				priv->vip_cntrl_2 = video;
 			}
 		}
+		if (priv->audio.ports[0]) {
+			priv->params.audio_cfg = priv->audio.ports[0];
+			priv->params.audio_format =
+				priv->audio.port_types[0];
+			priv->params.audio_clk_cfg =
+				priv->params.audio_format ==
+				AFMT_SPDIF ? 0 : 1;
+		}
 	}
 
 	return 0;
diff --git a/include/sound/tda998x.h b/include/sound/tda998x.h
deleted file mode 100644
index bef1da7..0000000
--- a/include/sound/tda998x.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef SND_TDA998X_H
-#define SND_TDA998X_H
-
-struct tda998x_audio {
-	u8 ports[2];			/* AP value */
-	u8 port_types[2];		/* AFMT_xxx */
-};
-#endif
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux