linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] v4l: fwnode: Add debug prints for V4L2 endpoint property parsing
@ 2017-12-04 21:45 Sakari Ailus
  2017-12-05 20:35 ` Niklas Söderlund
  0 siblings, 1 reply; 2+ messages in thread
From: Sakari Ailus @ 2017-12-04 21:45 UTC (permalink / raw)
  To: linux-media; +Cc: niklas.soderlund

Print debug info as standard V4L2 endpoint are parsed.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/v4l2-core/v4l2-fwnode.c | 101 +++++++++++++++++++++++++++-------
 1 file changed, 80 insertions(+), 21 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
index 9c17a26d544c..bc927bbd4160 100644
--- a/drivers/media/v4l2-core/v4l2-fwnode.c
+++ b/drivers/media/v4l2-core/v4l2-fwnode.c
@@ -66,6 +66,7 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
 			lanes_used |= BIT(array[i]);
 
 			bus->data_lanes[i] = array[i];
+			pr_debug("lane %u position %u\n", i, array[i]);
 		}
 
 		rval = fwnode_property_read_u32_array(fwnode,
@@ -82,8 +83,13 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
 						       "lane-polarities", array,
 						       1 + bus->num_data_lanes);
 
-			for (i = 0; i < 1 + bus->num_data_lanes; i++)
+			for (i = 0; i < 1 + bus->num_data_lanes; i++) {
 				bus->lane_polarities[i] = array[i];
+				pr_debug("lane %u polarity %sinverted",
+					 i, array[i] ? "" : "not ");
+			}
+		} else {
+			pr_debug("no lane polarities defined, assuming not inverted\n");
 		}
 
 	}
@@ -95,12 +101,15 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
 
 		bus->clock_lane = v;
 		have_clk_lane = true;
+		pr_debug("clock lane position %u\n", v);
 	}
 
-	if (fwnode_property_present(fwnode, "clock-noncontinuous"))
+	if (fwnode_property_present(fwnode, "clock-noncontinuous")) {
 		flags |= V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK;
-	else if (have_clk_lane || bus->num_data_lanes > 0)
+		pr_debug("contiguous clock\n");
+	} else if (have_clk_lane || bus->num_data_lanes > 0) {
 		flags |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
+	}
 
 	bus->flags = flags;
 	vep->bus_type = V4L2_MBUS_CSI2;
@@ -115,44 +124,63 @@ static void v4l2_fwnode_endpoint_parse_parallel_bus(
 	unsigned int flags = 0;
 	u32 v;
 
-	if (!fwnode_property_read_u32(fwnode, "hsync-active", &v))
+	if (!fwnode_property_read_u32(fwnode, "hsync-active", &v)) {
 		flags |= v ? V4L2_MBUS_HSYNC_ACTIVE_HIGH :
 			V4L2_MBUS_HSYNC_ACTIVE_LOW;
+		pr_debug("hsync-active %s\n", v ? "high" : "low");
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "vsync-active", &v))
+	if (!fwnode_property_read_u32(fwnode, "vsync-active", &v)) {
 		flags |= v ? V4L2_MBUS_VSYNC_ACTIVE_HIGH :
 			V4L2_MBUS_VSYNC_ACTIVE_LOW;
+		pr_debug("vsync-active %s\n", v ? "high" : "low");
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "field-even-active", &v))
+	if (!fwnode_property_read_u32(fwnode, "field-even-active", &v)) {
 		flags |= v ? V4L2_MBUS_FIELD_EVEN_HIGH :
 			V4L2_MBUS_FIELD_EVEN_LOW;
+		pr_debug("field-even-active %s\n", v ? "high": "low");
+	}
+
 	if (flags)
 		vep->bus_type = V4L2_MBUS_PARALLEL;
 	else
 		vep->bus_type = V4L2_MBUS_BT656;
 
-	if (!fwnode_property_read_u32(fwnode, "pclk-sample", &v))
+	if (!fwnode_property_read_u32(fwnode, "pclk-sample", &v)) {
 		flags |= v ? V4L2_MBUS_PCLK_SAMPLE_RISING :
 			V4L2_MBUS_PCLK_SAMPLE_FALLING;
+		pr_debug("pclk-sample %s\n", v ? "high" : "low");
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "data-active", &v))
+	if (!fwnode_property_read_u32(fwnode, "data-active", &v)) {
 		flags |= v ? V4L2_MBUS_DATA_ACTIVE_HIGH :
 			V4L2_MBUS_DATA_ACTIVE_LOW;
+		pr_debug("data-active %s\n", v ? "high" : "low");
+	}
 
-	if (fwnode_property_present(fwnode, "slave-mode"))
+	if (fwnode_property_present(fwnode, "slave-mode")) {
+		pr_debug("slave mode\n");
 		flags |= V4L2_MBUS_SLAVE;
-	else
+	} else {
 		flags |= V4L2_MBUS_MASTER;
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "bus-width", &v))
+	if (!fwnode_property_read_u32(fwnode, "bus-width", &v)) {
 		bus->bus_width = v;
+		pr_debug("bus-width %u\n", v);
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "data-shift", &v))
+	if (!fwnode_property_read_u32(fwnode, "data-shift", &v)) {
 		bus->data_shift = v;
+		pr_debug("data-shift %u\n", v);
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "sync-on-green-active", &v))
+	if (!fwnode_property_read_u32(fwnode, "sync-on-green-active", &v)) {
 		flags |= v ? V4L2_MBUS_VIDEO_SOG_ACTIVE_HIGH :
 			V4L2_MBUS_VIDEO_SOG_ACTIVE_LOW;
+		pr_debug("sync-on-green-active %s\n", v ? "high" : "low");
+	}
 
 	bus->flags = flags;
 
@@ -166,17 +194,25 @@ v4l2_fwnode_endpoint_parse_csi1_bus(struct fwnode_handle *fwnode,
 	struct v4l2_fwnode_bus_mipi_csi1 *bus = &vep->bus.mipi_csi1;
 	u32 v;
 
-	if (!fwnode_property_read_u32(fwnode, "clock-inv", &v))
+	if (!fwnode_property_read_u32(fwnode, "clock-inv", &v)) {
 		bus->clock_inv = v;
+		pr_debug("clock-inv %u\n", v);
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "strobe", &v))
+	if (!fwnode_property_read_u32(fwnode, "strobe", &v)) {
 		bus->strobe = v;
+		pr_debug("strobe %u\n", v);
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "data-lanes", &v))
+	if (!fwnode_property_read_u32(fwnode, "data-lanes", &v)) {
 		bus->data_lane = v;
+		pr_debug("data-lanes %u\n", v);
+	}
 
-	if (!fwnode_property_read_u32(fwnode, "clock-lanes", &v))
+	if (!fwnode_property_read_u32(fwnode, "clock-lanes", &v)) {
 		bus->clock_lane = v;
+		pr_debug("clock-lanes %u\n", v);
+	}
 
 	if (bus_type == V4L2_FWNODE_BUS_TYPE_CCP2)
 		vep->bus_type = V4L2_MBUS_CCP2;
@@ -184,12 +220,14 @@ v4l2_fwnode_endpoint_parse_csi1_bus(struct fwnode_handle *fwnode,
 		vep->bus_type = V4L2_MBUS_CSI1;
 }
 
-int v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
+int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
 			       struct v4l2_fwnode_endpoint *vep)
 {
 	u32 bus_type = 0;
 	int rval;
 
+	pr_debug("===== begin V4L2 endpoint properties\n");
+
 	fwnode_graph_parse_endpoint(fwnode, &vep->base);
 
 	/* Zero fields from bus_type to until the end */
@@ -210,16 +248,29 @@ int v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
 		if (vep->bus.mipi_csi2.flags == 0)
 			v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep);
 
-		return 0;
+		break;
 	case V4L2_FWNODE_BUS_TYPE_CCP2:
 	case V4L2_FWNODE_BUS_TYPE_CSI1:
 		v4l2_fwnode_endpoint_parse_csi1_bus(fwnode, vep, bus_type);
 
-		return 0;
+		break;
 	default:
 		pr_warn("unsupported bus type %u\n", bus_type);
 		return -EINVAL;
 	}
+
+	return 0;
+}
+int v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
+			       struct v4l2_fwnode_endpoint *vep)
+{
+	int ret;
+
+	ret = __v4l2_fwnode_endpoint_parse(fwnode, vep);
+
+	pr_debug("===== end V4L2 endpoint properties\n");
+
+	return ret;
 }
 EXPORT_SYMBOL_GPL(v4l2_fwnode_endpoint_parse);
 
@@ -243,13 +294,15 @@ struct v4l2_fwnode_endpoint *v4l2_fwnode_endpoint_alloc_parse(
 	if (!vep)
 		return ERR_PTR(-ENOMEM);
 
-	rval = v4l2_fwnode_endpoint_parse(fwnode, vep);
+	rval = __v4l2_fwnode_endpoint_parse(fwnode, vep);
 	if (rval < 0)
 		goto out_err;
 
 	rval = fwnode_property_read_u64_array(fwnode, "link-frequencies",
 					      NULL, 0);
 	if (rval > 0) {
+		unsigned int i;
+
 		vep->link_frequencies =
 			kmalloc_array(rval, sizeof(*vep->link_frequencies),
 				      GFP_KERNEL);
@@ -265,8 +318,14 @@ struct v4l2_fwnode_endpoint *v4l2_fwnode_endpoint_alloc_parse(
 			vep->nr_of_link_frequencies);
 		if (rval < 0)
 			goto out_err;
+
+		for (i = 0; i < vep->nr_of_link_frequencies; i++)
+			pr_info("link-frequencies %u value %llu\n", i,
+				vep->link_frequencies[i]);
 	}
 
+	pr_debug("===== end V4L2 endpoint properties\n");
+
 	return vep;
 
 out_err:
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/1] v4l: fwnode: Add debug prints for V4L2 endpoint property parsing
  2017-12-04 21:45 [PATCH 1/1] v4l: fwnode: Add debug prints for V4L2 endpoint property parsing Sakari Ailus
@ 2017-12-05 20:35 ` Niklas Söderlund
  0 siblings, 0 replies; 2+ messages in thread
From: Niklas Söderlund @ 2017-12-05 20:35 UTC (permalink / raw)
  To: Sakari Ailus; +Cc: linux-media

Hi Sakari,

Thanks for your patch.

On 2017-12-04 23:45:01 +0200, Sakari Ailus wrote:
> Print debug info as standard V4L2 endpoint are parsed.
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>

> ---
>  drivers/media/v4l2-core/v4l2-fwnode.c | 101 +++++++++++++++++++++++++++-------
>  1 file changed, 80 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
> index 9c17a26d544c..bc927bbd4160 100644
> --- a/drivers/media/v4l2-core/v4l2-fwnode.c
> +++ b/drivers/media/v4l2-core/v4l2-fwnode.c
> @@ -66,6 +66,7 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
>  			lanes_used |= BIT(array[i]);
>  
>  			bus->data_lanes[i] = array[i];
> +			pr_debug("lane %u position %u\n", i, array[i]);
>  		}
>  
>  		rval = fwnode_property_read_u32_array(fwnode,
> @@ -82,8 +83,13 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
>  						       "lane-polarities", array,
>  						       1 + bus->num_data_lanes);
>  
> -			for (i = 0; i < 1 + bus->num_data_lanes; i++)
> +			for (i = 0; i < 1 + bus->num_data_lanes; i++) {
>  				bus->lane_polarities[i] = array[i];
> +				pr_debug("lane %u polarity %sinverted",
> +					 i, array[i] ? "" : "not ");
> +			}
> +		} else {
> +			pr_debug("no lane polarities defined, assuming not inverted\n");
>  		}
>  
>  	}
> @@ -95,12 +101,15 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
>  
>  		bus->clock_lane = v;
>  		have_clk_lane = true;
> +		pr_debug("clock lane position %u\n", v);
>  	}
>  
> -	if (fwnode_property_present(fwnode, "clock-noncontinuous"))
> +	if (fwnode_property_present(fwnode, "clock-noncontinuous")) {
>  		flags |= V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK;
> -	else if (have_clk_lane || bus->num_data_lanes > 0)
> +		pr_debug("contiguous clock\n");
> +	} else if (have_clk_lane || bus->num_data_lanes > 0) {
>  		flags |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
> +	}
>  
>  	bus->flags = flags;
>  	vep->bus_type = V4L2_MBUS_CSI2;
> @@ -115,44 +124,63 @@ static void v4l2_fwnode_endpoint_parse_parallel_bus(
>  	unsigned int flags = 0;
>  	u32 v;
>  
> -	if (!fwnode_property_read_u32(fwnode, "hsync-active", &v))
> +	if (!fwnode_property_read_u32(fwnode, "hsync-active", &v)) {
>  		flags |= v ? V4L2_MBUS_HSYNC_ACTIVE_HIGH :
>  			V4L2_MBUS_HSYNC_ACTIVE_LOW;
> +		pr_debug("hsync-active %s\n", v ? "high" : "low");
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "vsync-active", &v))
> +	if (!fwnode_property_read_u32(fwnode, "vsync-active", &v)) {
>  		flags |= v ? V4L2_MBUS_VSYNC_ACTIVE_HIGH :
>  			V4L2_MBUS_VSYNC_ACTIVE_LOW;
> +		pr_debug("vsync-active %s\n", v ? "high" : "low");
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "field-even-active", &v))
> +	if (!fwnode_property_read_u32(fwnode, "field-even-active", &v)) {
>  		flags |= v ? V4L2_MBUS_FIELD_EVEN_HIGH :
>  			V4L2_MBUS_FIELD_EVEN_LOW;
> +		pr_debug("field-even-active %s\n", v ? "high": "low");
> +	}
> +
>  	if (flags)
>  		vep->bus_type = V4L2_MBUS_PARALLEL;
>  	else
>  		vep->bus_type = V4L2_MBUS_BT656;
>  
> -	if (!fwnode_property_read_u32(fwnode, "pclk-sample", &v))
> +	if (!fwnode_property_read_u32(fwnode, "pclk-sample", &v)) {
>  		flags |= v ? V4L2_MBUS_PCLK_SAMPLE_RISING :
>  			V4L2_MBUS_PCLK_SAMPLE_FALLING;
> +		pr_debug("pclk-sample %s\n", v ? "high" : "low");
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "data-active", &v))
> +	if (!fwnode_property_read_u32(fwnode, "data-active", &v)) {
>  		flags |= v ? V4L2_MBUS_DATA_ACTIVE_HIGH :
>  			V4L2_MBUS_DATA_ACTIVE_LOW;
> +		pr_debug("data-active %s\n", v ? "high" : "low");
> +	}
>  
> -	if (fwnode_property_present(fwnode, "slave-mode"))
> +	if (fwnode_property_present(fwnode, "slave-mode")) {
> +		pr_debug("slave mode\n");
>  		flags |= V4L2_MBUS_SLAVE;
> -	else
> +	} else {
>  		flags |= V4L2_MBUS_MASTER;
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "bus-width", &v))
> +	if (!fwnode_property_read_u32(fwnode, "bus-width", &v)) {
>  		bus->bus_width = v;
> +		pr_debug("bus-width %u\n", v);
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "data-shift", &v))
> +	if (!fwnode_property_read_u32(fwnode, "data-shift", &v)) {
>  		bus->data_shift = v;
> +		pr_debug("data-shift %u\n", v);
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "sync-on-green-active", &v))
> +	if (!fwnode_property_read_u32(fwnode, "sync-on-green-active", &v)) {
>  		flags |= v ? V4L2_MBUS_VIDEO_SOG_ACTIVE_HIGH :
>  			V4L2_MBUS_VIDEO_SOG_ACTIVE_LOW;
> +		pr_debug("sync-on-green-active %s\n", v ? "high" : "low");
> +	}
>  
>  	bus->flags = flags;
>  
> @@ -166,17 +194,25 @@ v4l2_fwnode_endpoint_parse_csi1_bus(struct fwnode_handle *fwnode,
>  	struct v4l2_fwnode_bus_mipi_csi1 *bus = &vep->bus.mipi_csi1;
>  	u32 v;
>  
> -	if (!fwnode_property_read_u32(fwnode, "clock-inv", &v))
> +	if (!fwnode_property_read_u32(fwnode, "clock-inv", &v)) {
>  		bus->clock_inv = v;
> +		pr_debug("clock-inv %u\n", v);
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "strobe", &v))
> +	if (!fwnode_property_read_u32(fwnode, "strobe", &v)) {
>  		bus->strobe = v;
> +		pr_debug("strobe %u\n", v);
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "data-lanes", &v))
> +	if (!fwnode_property_read_u32(fwnode, "data-lanes", &v)) {
>  		bus->data_lane = v;
> +		pr_debug("data-lanes %u\n", v);
> +	}
>  
> -	if (!fwnode_property_read_u32(fwnode, "clock-lanes", &v))
> +	if (!fwnode_property_read_u32(fwnode, "clock-lanes", &v)) {
>  		bus->clock_lane = v;
> +		pr_debug("clock-lanes %u\n", v);
> +	}
>  
>  	if (bus_type == V4L2_FWNODE_BUS_TYPE_CCP2)
>  		vep->bus_type = V4L2_MBUS_CCP2;
> @@ -184,12 +220,14 @@ v4l2_fwnode_endpoint_parse_csi1_bus(struct fwnode_handle *fwnode,
>  		vep->bus_type = V4L2_MBUS_CSI1;
>  }
>  
> -int v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
> +int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
>  			       struct v4l2_fwnode_endpoint *vep)
>  {
>  	u32 bus_type = 0;
>  	int rval;
>  
> +	pr_debug("===== begin V4L2 endpoint properties\n");
> +
>  	fwnode_graph_parse_endpoint(fwnode, &vep->base);
>  
>  	/* Zero fields from bus_type to until the end */
> @@ -210,16 +248,29 @@ int v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
>  		if (vep->bus.mipi_csi2.flags == 0)
>  			v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep);
>  
> -		return 0;
> +		break;
>  	case V4L2_FWNODE_BUS_TYPE_CCP2:
>  	case V4L2_FWNODE_BUS_TYPE_CSI1:
>  		v4l2_fwnode_endpoint_parse_csi1_bus(fwnode, vep, bus_type);
>  
> -		return 0;
> +		break;
>  	default:
>  		pr_warn("unsupported bus type %u\n", bus_type);
>  		return -EINVAL;
>  	}
> +
> +	return 0;
> +}
> +int v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
> +			       struct v4l2_fwnode_endpoint *vep)
> +{
> +	int ret;
> +
> +	ret = __v4l2_fwnode_endpoint_parse(fwnode, vep);
> +
> +	pr_debug("===== end V4L2 endpoint properties\n");
> +
> +	return ret;
>  }
>  EXPORT_SYMBOL_GPL(v4l2_fwnode_endpoint_parse);
>  
> @@ -243,13 +294,15 @@ struct v4l2_fwnode_endpoint *v4l2_fwnode_endpoint_alloc_parse(
>  	if (!vep)
>  		return ERR_PTR(-ENOMEM);
>  
> -	rval = v4l2_fwnode_endpoint_parse(fwnode, vep);
> +	rval = __v4l2_fwnode_endpoint_parse(fwnode, vep);
>  	if (rval < 0)
>  		goto out_err;
>  
>  	rval = fwnode_property_read_u64_array(fwnode, "link-frequencies",
>  					      NULL, 0);
>  	if (rval > 0) {
> +		unsigned int i;
> +
>  		vep->link_frequencies =
>  			kmalloc_array(rval, sizeof(*vep->link_frequencies),
>  				      GFP_KERNEL);
> @@ -265,8 +318,14 @@ struct v4l2_fwnode_endpoint *v4l2_fwnode_endpoint_alloc_parse(
>  			vep->nr_of_link_frequencies);
>  		if (rval < 0)
>  			goto out_err;
> +
> +		for (i = 0; i < vep->nr_of_link_frequencies; i++)
> +			pr_info("link-frequencies %u value %llu\n", i,
> +				vep->link_frequencies[i]);
>  	}
>  
> +	pr_debug("===== end V4L2 endpoint properties\n");
> +
>  	return vep;
>  
>  out_err:
> -- 
> 2.11.0
> 

-- 
Regards,
Niklas Söderlund

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-12-05 20:35 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-04 21:45 [PATCH 1/1] v4l: fwnode: Add debug prints for V4L2 endpoint property parsing Sakari Ailus
2017-12-05 20:35 ` Niklas Söderlund

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).