From: jacopo mondi <jacopo@jmondi.org>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: linux-media@vger.kernel.org, devicetree@vger.kernel.org,
slongerbeam@gmail.com, niklas.soderlund@ragnatech.se
Subject: Re: [PATCH v2 18/23] v4l: fwnode: Use media bus type for bus parser selection
Date: Wed, 12 Sep 2018 17:15:05 +0200 [thread overview]
Message-ID: <20180912151505.GB11509@w540> (raw)
In-Reply-To: <20180827093000.29165-19-sakari.ailus@linux.intel.com>
[-- Attachment #1: Type: text/plain, Size: 7148 bytes --]
Hi Sakari,
On Mon, Aug 27, 2018 at 12:29:55PM +0300, Sakari Ailus wrote:
> Use the media bus types instead of the fwnode bus types internally. This
> is the interface to the drivers as well, making the use of the fwnode bus
> types more localised to the V4L2 fwnode framework.
>
So basically now "v4l2_fwnode_bus_type" it is only used in a few
places in v4l2-fwnode and has to be kept in sync with the bus types
listed in the devicetree bindings documentation?
Do you think it is still worth to keep around functions dealing with
that enum type as "v4l2_fwnode_bus_type_to_string()" ?
It is only used by a debug printout (without that much value added, as
we can print out the integer parsed from the DT). In all other cases
it can be converted to the corresponing v4l2_mbus_type immediately.
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
> drivers/media/v4l2-core/v4l2-fwnode.c | 100 +++++++++++++++++++++++++++-------
> 1 file changed, 80 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
> index 6c5a76442667..d502abd7406b 100644
> --- a/drivers/media/v4l2-core/v4l2-fwnode.c
> +++ b/drivers/media/v4l2-core/v4l2-fwnode.c
> @@ -42,9 +42,66 @@ enum v4l2_fwnode_bus_type {
> NR_OF_V4L2_FWNODE_BUS_TYPE,
> };
>
> +static const struct v4l2_fwnode_bus_conv {
> + enum v4l2_fwnode_bus_type fwnode_bus_type;
> + enum v4l2_mbus_type mbus_type;
> + const char *name;
> +} busses[] = {
> + {
> + V4L2_FWNODE_BUS_TYPE_GUESS,
> + V4L2_MBUS_UNKNOWN,
> + "not specified",
> + }, {
> + V4L2_FWNODE_BUS_TYPE_CSI2_CPHY,
> + V4L2_MBUS_CSI2_CPHY,
> + "MIPI CSI-2 C-PHY",
> + }, {
> + V4L2_FWNODE_BUS_TYPE_CSI1,
> + V4L2_MBUS_CSI1,
> + "MIPI CSI-1",
> + }, {
> + V4L2_FWNODE_BUS_TYPE_CCP2,
> + V4L2_MBUS_CCP2,
> + "compact camera port 2",
> + }, {
> + V4L2_FWNODE_BUS_TYPE_CSI2_DPHY,
> + V4L2_MBUS_CSI2_DPHY,
> + "MIPI CSI-2 D-PHY",
> + }, {
> + V4L2_FWNODE_BUS_TYPE_PARALLEL,
> + V4L2_MBUS_PARALLEL,
> + "parallel",
> + }, {
> + V4L2_FWNODE_BUS_TYPE_BT656,
> + V4L2_MBUS_BT656,
> + "Bt.656",
> + }
> +};
> +
> +static const struct v4l2_fwnode_bus_conv *
> +get_v4l2_fwnode_bus_conv_by_fwnode_bus(enum v4l2_fwnode_bus_type type)
> +{
> + unsigned int i;
> +
> + for (i = 0; i < ARRAY_SIZE(busses); i++)
> + if (busses[i].fwnode_bus_type == type)
> + return &busses[i];
> +
> + return NULL;
> +}
> +
> +static enum v4l2_mbus_type
> +v4l2_fwnode_bus_type_to_mbus(enum v4l2_fwnode_bus_type type)
> +{
> + const struct v4l2_fwnode_bus_conv *conv =
> + get_v4l2_fwnode_bus_conv_by_fwnode_bus(type);
> +
> + return conv ? conv->mbus_type : V4L2_MBUS_UNKNOWN;
> +}
> +
> static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
> struct v4l2_fwnode_endpoint *vep,
> - enum v4l2_fwnode_bus_type bus_type)
> + enum v4l2_mbus_type bus_type)
> {
> struct v4l2_fwnode_bus_mipi_csi2 *bus = &vep->bus.mipi_csi2;
> bool have_clk_lane = false, have_data_lanes = false,
> @@ -58,7 +115,7 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
> u32 v;
> int rval;
>
> - if (bus_type == V4L2_FWNODE_BUS_TYPE_CSI2_DPHY) {
> + if (bus_type == V4L2_MBUS_CSI2_DPHY) {
> use_default_lane_mapping = true;
>
> num_data_lanes = min_t(u32, bus->num_data_lanes,
> @@ -134,7 +191,7 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
> flags |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
> }
>
> - if (bus_type == V4L2_FWNODE_BUS_TYPE_CSI2_DPHY || lanes_used ||
> + if (bus_type == V4L2_MBUS_CSI2_DPHY || lanes_used ||
> have_clk_lane || (flags & ~V4L2_MBUS_CSI2_CONTINUOUS_CLOCK)) {
> bus->flags = flags;
> vep->bus_type = V4L2_MBUS_CSI2_DPHY;
> @@ -177,7 +234,7 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
>
> static void v4l2_fwnode_endpoint_parse_parallel_bus(
> struct fwnode_handle *fwnode, struct v4l2_fwnode_endpoint *vep,
> - enum v4l2_fwnode_bus_type bus_type)
> + enum v4l2_mbus_type bus_type)
> {
> struct v4l2_fwnode_bus_parallel *bus = &vep->bus.parallel;
> unsigned int flags = 0;
> @@ -274,11 +331,11 @@ static void v4l2_fwnode_endpoint_parse_parallel_bus(
> else
> vep->bus_type = V4L2_MBUS_BT656;
> break;
> - case V4L2_FWNODE_BUS_TYPE_PARALLEL:
> + case V4L2_MBUS_PARALLEL:
> vep->bus_type = V4L2_MBUS_PARALLEL;
> bus->flags = flags;
> break;
> - case V4L2_FWNODE_BUS_TYPE_BT656:
> + case V4L2_MBUS_BT656:
> vep->bus_type = V4L2_MBUS_BT656;
> bus->flags = flags & ~PARALLEL_MBUS_FLAGS;
> break;
> @@ -288,7 +345,7 @@ static void v4l2_fwnode_endpoint_parse_parallel_bus(
> static void
> v4l2_fwnode_endpoint_parse_csi1_bus(struct fwnode_handle *fwnode,
> struct v4l2_fwnode_endpoint *vep,
> - enum v4l2_fwnode_bus_type bus_type)
> + enum v4l2_mbus_type bus_type)
> {
> struct v4l2_fwnode_bus_mipi_csi1 *bus = &vep->bus.mipi_csi1;
> u32 v;
> @@ -313,7 +370,7 @@ v4l2_fwnode_endpoint_parse_csi1_bus(struct fwnode_handle *fwnode,
> pr_debug("clock-lanes %u\n", v);
> }
>
> - if (bus_type == V4L2_FWNODE_BUS_TYPE_CCP2)
> + if (bus_type == V4L2_MBUS_CCP2)
> vep->bus_type = V4L2_MBUS_CCP2;
> else
> vep->bus_type = V4L2_MBUS_CSI1;
> @@ -323,6 +380,7 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
> struct v4l2_fwnode_endpoint *vep)
> {
> u32 bus_type = 0;
> + enum v4l2_mbus_type mbus_type;
> int rval;
>
> if (vep->bus_type == V4L2_MBUS_UNKNOWN) {
> @@ -341,10 +399,12 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
>
> fwnode_property_read_u32(fwnode, "bus-type", &bus_type);
>
> - switch (bus_type) {
> - case V4L2_FWNODE_BUS_TYPE_GUESS:
> + mbus_type = v4l2_fwnode_bus_type_to_mbus(bus_type);
> +
> + switch (mbus_type) {
> + case V4L2_MBUS_UNKNOWN:
> rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep,
> - bus_type);
> + mbus_type);
> if (rval)
> return rval;
>
> @@ -353,26 +413,26 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
> fwnode, vep, V4L2_MBUS_UNKNOWN);
>
> break;
> - case V4L2_FWNODE_BUS_TYPE_CCP2:
> - case V4L2_FWNODE_BUS_TYPE_CSI1:
> - v4l2_fwnode_endpoint_parse_csi1_bus(fwnode, vep, bus_type);
> + case V4L2_MBUS_CCP2:
> + case V4L2_MBUS_CSI1:
> + v4l2_fwnode_endpoint_parse_csi1_bus(fwnode, vep, mbus_type);
>
> break;
> - case V4L2_FWNODE_BUS_TYPE_CSI2_DPHY:
> + case V4L2_MBUS_CSI2_DPHY:
> vep->bus_type = V4L2_MBUS_CSI2_DPHY;
> rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep,
> - bus_type);
> + mbus_type);
> if (rval)
> return rval;
>
> break;
> - case V4L2_FWNODE_BUS_TYPE_PARALLEL:
> - case V4L2_FWNODE_BUS_TYPE_BT656:
> - v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep, bus_type);
> + case V4L2_MBUS_PARALLEL:
> + case V4L2_MBUS_BT656:
> + v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep, mbus_type);
>
> break;
> default:
> - pr_warn("unsupported bus type %u\n", bus_type);
> + pr_warn("unsupported bus type %u\n", mbus_type);
> return -EINVAL;
> }
>
> --
> 2.11.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2018-09-12 20:41 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-27 9:29 [PATCH v2 00/23] V4L2 fwnode rework; support for default configuration Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 01/23] v4l: fwnode: Add debug prints for V4L2 endpoint property parsing Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 02/23] v4l: fwnode: Use fwnode_graph_for_each_endpoint Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 03/23] v4l: fwnode: The CSI-2 clock is continuous if it's not non-continuous Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 04/23] dt-bindings: media: Specify bus type for MIPI D-PHY, others, explicitly Sakari Ailus
2018-08-29 0:45 ` Rob Herring
2018-08-27 9:29 ` [PATCH v2 05/23] v4l: fwnode: Add definitions for CSI-2 D-PHY, parallel and Bt.656 busses Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 06/23] v4l: mediabus: Recognise CSI-2 D-PHY and C-PHY Sakari Ailus
2018-08-31 8:02 ` [PATCH v2.1 " Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 07/23] v4l: fwnode: Let the caller provide V4L2 fwnode endpoint Sakari Ailus
2018-09-12 14:51 ` jacopo mondi
2018-09-12 20:46 ` Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 08/23] v4l: fwnode: Detect bus type correctly Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 09/23] v4l: fwnode: Make use of newly specified bus types Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 10/23] v4l: fwnode: Read lane inversion information despite lane numbering Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 11/23] v4l: fwnode: Only assign configuration if there is no error Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 12/23] v4l: fwnode: Support driver-defined lane mapping defaults Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 13/23] v4l: fwnode: Support default CSI-2 lane mapping for drivers Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 14/23] v4l: fwnode: Parse the graph endpoint as last Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 15/23] v4l: fwnode: Use default parallel flags Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 16/23] v4l: fwnode: Initialise the V4L2 fwnode endpoints to zero Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 17/23] v4l: fwnode: Only zero the struct if bus type is set to V4L2_MBUS_UNKNOWN Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 18/23] v4l: fwnode: Use media bus type for bus parser selection Sakari Ailus
2018-09-12 15:15 ` jacopo mondi [this message]
2018-09-12 20:53 ` Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 19/23] v4l: fwnode: Print bus type Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 20/23] v4l: fwnode: Use V4L2 fwnode endpoint media bus type if set Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 21/23] v4l: fwnode: Support parsing of CSI-2 C-PHY endpoints Sakari Ailus
2018-08-27 9:29 ` [PATCH v2 22/23] v4l: fwnode: Update V4L2 fwnode endpoint parsing documentation Sakari Ailus
2018-08-27 9:30 ` [PATCH v2 23/23] smiapp: Query the V4L2 endpoint for a specific bus type Sakari Ailus
2018-08-29 0:53 ` [PATCH v2 00/23] V4L2 fwnode rework; support for default configuration Steve Longerbeam
2018-08-29 12:52 ` Sakari Ailus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180912151505.GB11509@w540 \
--to=jacopo@jmondi.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=niklas.soderlund@ragnatech.se \
--cc=sakari.ailus@linux.intel.com \
--cc=slongerbeam@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).