Linux kernel staging patches
 help / color / mirror / Atom feed
* Re: atomisp current issues
From: Laurent Pinchart @ 2021-11-04  9:53 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: Linux Media Mailing List, Tsuchiya Yuto, Hans de Goede,
	Patrik Gfeller, Mauro Carvalho Chehab, Sakari Ailus,
	Greg Kroah-Hartman, Hans Verkuil, Kaixu Xia, Yang Li,
	Tomi Valkeinen, Alex Dewar, Aline Santana Cordeiro, Arnd Bergmann,
	Alan, Peter Zijlstra, Ingo Molnar, linux-staging,
	Linux Kernel Mailing List, Andy Shevchenko
In-Reply-To: <20211103135418.496f75d5@sal.lan>

Hi Mauro,

On Wed, Nov 03, 2021 at 01:54:18PM +0000, Mauro Carvalho Chehab wrote:
> Hi,
> 
> From what I've seen so far, those are the main issues with regards to V4L2 API,
> in order to allow a generic V4L2 application to work with it.
> 
> MMAP support
> ============
> 
> Despite having some MMAP code on it, the current implementation is broken. 
> Fixing it is not trivial, as it would require fixing the HMM support on it, 
> which does several tricks.
> 
> The best would be to replace it by something simpler. If this is similar
> enough to IPU3, perhaps one idea would be to replace the HMM code on it by 
> videodev2 + IPU3 HMM code.
> 
> As this is not trivial, I'm postponing such task. If someone has enough
> time, it would be great to have this fixed.
> 
> From my side, I opted to add support for USERPTR on camorama:
> 
> 	https://github.com/alessio/camorama

We should *really* phase out USERPTR support. Worst case you may support
DMABUF only if MMAP is problematic, but I don't really see why it could
be easy to map an imported buffer and difficult to map a buffer
allocated by the driver. videobuf2 should be used.

> As this is something I wanted to do anyway, and it allowed me to cleanup
> several things in camorama's code.
> 
> Support for USERPTR is not autodetected. So, this should be selected
> via a command line parameter. Here (Fedora), I installed the build
> dependencies on my test device with:
> 
> 	$ sudo dnf builddep camorama
> 	$ sudo dnf install gnome-common  # for gnome-autogen.sh
> 
> Testing it with atomisp would be:
> 
> 	$ git clone https://github.com/alessio/camorama
> 	$ cd camorama && ./autogen.sh
> 	$ make && ./src/camorama -d /dev/video2  --debug -U -D
> 
> In time:
> --------
> 
>  Camorama currently doesn't work due to some other API bugs. See below.
> 
> 
> VIDIOC_G_FMT/VIDIOC_S_FMT/VIDIOC_TRY_FMT issues
> ===============================================
> 
> The implementation for VIDIOC_G_FMT/VIDIOC_S_FMT/VIDIOC_TRY_FMT are not
> properly implemented. It has several issues.
> 
> The main one is related to padding. Based on the comments inside the code,
> the ISP 2 seems to require padding to work, both vertically an horizontally.
> 
> Those are controlled by two modprobe parameters: pad_h and pad_w.
> The default for both is 16.
> 
> There are some other padding logic inside the function which sets the
> video formats at atomisp_cmd: atomisp_set_fmt(). This function is quite
> complex, being big and it calls several other atomisp kAPIs.
> 
> It basically queries the sensor, and then it mounts a pipeline that
> will have the sensor + ISP blocks. Those ISP blocks convert the format
> from Bayer into YUYV or RGB and scale down the resolution in order to
> match the request.
> 
> It also adjusts the padding. The padding code there is very complex,
> as it not only uses pad_h/pad_w, having things like:
> 
> 	if (!atomisp_subdev_format_conversion(asd, source_pad)) {
> 		padding_w = 0;
> 		padding_h = 0;
> 	} else if (IS_BYT) {
> 		padding_w = 12;
> 		padding_h = 12;
> 	}
> 	...
> 	atomisp_get_dis_envelop(asd, f->fmt.pix.width, f->fmt.pix.height,
> 				&dvs_env_w, &dvs_env_h);
> 	...
> 	/*
> 	 * set format info to sensor
> 	 * In continuous mode, resolution is set only if it is higher than
> 	 * existing value. This because preview pipe will be configured after
> 	 * capture pipe and usually has lower resolution than capture pipe.
> 	 */
> 	if (!asd->continuous_mode->val ||
> 	    isp_sink_fmt->width < (f->fmt.pix.width + padding_w + dvs_env_w) ||
> 	    isp_sink_fmt->height < (f->fmt.pix.height + padding_h +
> 				    dvs_env_h)) {
> 
> Due to that, the sensors are set to have those extra 16 columns/lines.
> Those extra data are consumed internally at the driver, so the output
> buffer won't contain those.
> 
> Yet, the buffer size to be allocated by userspace on USERPTR mode is not just
> width x height x bpp, but it may need extra space for such pads and/or other 
> things.
> 
> In practice, when VIDIOC_S_FMT asks for a 1600x1200 resolution, it
> actually sets 1616x1216 at the sensor (at the pad source), but the
> pad sink provides the requested resolution: 1600x1200.
> 
> However, the resolution returned by VIDIOC_G_FMT/VIDIOC_S_FMT/VIDIOC_TRY_FMT
> is not always the sink resolution. Sometimes, it returns the sensor format.
> 
> Fixing it has been challenging.
> 
> -
> 
> Another related issue is that, when a resolution bigger than the maximum
> resolution is requested, the driver doesn't return 1600x1200, but, instead,
> a smaller one.
> 
> On other words, setting to YUYV 1600x1200 gives:
> 
> 	$ v4l2-ctl --set-fmt-video pixelformat=YUYV,width=1600,height=1200 -d /dev/video2 --verbose
> 	VIDIOC_QUERYCAP: ok
> 	VIDIOC_G_FMT: ok
> 	VIDIOC_S_FMT: ok
> 	Format Video Capture:
> 		Width/Height      : 1600/1200
> 		Pixel Format      : 'YUYV' (YUYV 4:2:2)
> 		Field             : None
> 		Bytes per Line    : 3200
> 		Size Image        : 3842048
> 		Colorspace        : Rec. 709
> 		Transfer Function : Rec. 709
> 		YCbCr/HSV Encoding: Rec. 709
> 		Quantization      : Default (maps to Limited Range)
> 		Flags             : 
> 
> Setting to a higher resolution (which is a method that some apps use to test
> for the max resolution, when VIDIOC_ENUM_FRAMESIZES is not available or
> broken) produces:
> 
> 	$ v4l2-ctl --set-fmt-video pixelformat=YUYV,width=10000,height=10000 -d /dev/video2 --verbose
> 	VIDIOC_QUERYCAP: ok
> 	VIDIOC_G_FMT: ok
> 	VIDIOC_S_FMT: ok
> 	Format Video Capture:
> 		Width/Height      : 1600/900
> 		Pixel Format      : 'YUYV' (YUYV 4:2:2)
> 		Field             : None
> 		Bytes per Line    : 3200
> 		Size Image        : 2883584
> 		Colorspace        : Rec. 709
> 		Transfer Function : Rec. 709
> 		YCbCr/HSV Encoding: Rec. 709
> 		Quantization      : Default (maps to Limited Range)
> 		Flags             : 
> 
> Trying to set to the sensor resolution is even worse, as it returns EINVAL:
> 
> 	$ v4l2-ctl --set-fmt-video pixelformat=YUYV,width=1616,height=1216 -d /dev/video2 --verbose
> 	VIDIOC_QUERYCAP: ok
> 	VIDIOC_G_FMT: ok
> 	VIDIOC_S_FMT: failed: Invalid argument
> 
> The logs for such case are:
> 
> 	[ 4799.594724] atomisp-isp2 0000:00:03.0: can't create streams
> 	[ 4799.594757] atomisp-isp2 0000:00:03.0: __get_frame_info 1616x1216 (padded to 0) returned -22
> 	[ 4799.594781] atomisp-isp2 0000:00:03.0: Can't set format on ISP. Error -22
> 
> Video devices
> =============
> 
> Currently, 10 video? devices are created:
> 
> 	$ for i in $(ls /dev/video*|sort -k2 -to -n); do echo -n $i:; v4l2-ctl -D -d $i|grep Name; done
> 	/dev/video0:	Name             : ATOMISP ISP CAPTURE output
> 	/dev/video1:	Name             : ATOMISP ISP VIEWFINDER output
> 	/dev/video2:	Name             : ATOMISP ISP PREVIEW output
> 	/dev/video3:	Name             : ATOMISP ISP VIDEO output
> 	/dev/video4:	Name             : ATOMISP ISP ACC
> 	/dev/video5:	Name             : ATOMISP ISP MEMORY input
> 	/dev/video6:	Name             : ATOMISP ISP CAPTURE output
> 	/dev/video7:	Name             : ATOMISP ISP VIEWFINDER output
> 	/dev/video8:	Name             : ATOMISP ISP PREVIEW output
> 	/dev/video9:	Name             : ATOMISP ISP VIDEO output
> 	/dev/video10:	Name             : ATOMISP ISP ACC
> 
> That seems to be written to satisfy some Android-based app, but we don't
> really need all of those.
> 
> I'm thinking to comment out the part of the code which creates all of those,
> keeping just "ATOMISP ISP PREVIEW output", as I don't think we need all
> of those.

Why is that ? Being able to capture multiple streams in different
resolutions is important for lots of applications, the viewfinder
resolution is often different than the video streaming and/or still
capture resolution. Scaling after capture is often expensive (and there
are memory bandwidth and power constraints to take into account too). A
single-stream device may be better than nothing, but it's time to move
to the 21st century.

-- 
Regards,

Laurent Pinchart

^ permalink raw reply

* Re: atomisp current issues
From: Mauro Carvalho Chehab @ 2021-11-04 10:50 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Linux Media Mailing List, Tsuchiya Yuto, Hans de Goede,
	Patrik Gfeller, Mauro Carvalho Chehab, Sakari Ailus,
	Greg Kroah-Hartman, Hans Verkuil, Kaixu Xia, Yang Li,
	Tomi Valkeinen, Alex Dewar, Aline Santana Cordeiro, Arnd Bergmann,
	Alan, Peter Zijlstra, Ingo Molnar, linux-staging,
	Linux Kernel Mailing List, Andy Shevchenko
In-Reply-To: <YYOts0aoD/Quo5r6@pendragon.ideasonboard.com>

Em Thu, 4 Nov 2021 11:53:55 +0200
Laurent Pinchart <laurent.pinchart@ideasonboard.com> escreveu:

> Hi Mauro,
> 
> On Wed, Nov 03, 2021 at 01:54:18PM +0000, Mauro Carvalho Chehab wrote:
> > Hi,
> > 
> > From what I've seen so far, those are the main issues with regards to V4L2 API,
> > in order to allow a generic V4L2 application to work with it.
> > 
> > MMAP support
> > ============
> > 
> > Despite having some MMAP code on it, the current implementation is broken. 
> > Fixing it is not trivial, as it would require fixing the HMM support on it, 
> > which does several tricks.
> > 
> > The best would be to replace it by something simpler. If this is similar
> > enough to IPU3, perhaps one idea would be to replace the HMM code on it by 
> > videodev2 + IPU3 HMM code.
> > 
> > As this is not trivial, I'm postponing such task. If someone has enough
> > time, it would be great to have this fixed.
> > 
> > From my side, I opted to add support for USERPTR on camorama:
> > 
> > 	https://github.com/alessio/camorama  
> 
> We should *really* phase out USERPTR support. 

I'm not a big fan of userptr, buy why do we phase it out?

> Worst case you may support
> DMABUF only if MMAP is problematic, but I don't really see why it could
> be easy to map an imported buffer and difficult to map a buffer
> allocated by the driver. videobuf2 should be used.

Yeah, atomisp should be migrated to VB2, and such migration is listed at
its TODO file. However, this is a complex task, as its memory management
code is very complex. Maybe we could try to use the ISP3 code on it,
replacing the current HMM logic, but not sure if the implementation there 
would be compatible.

In any case, the current priority is to make the driver to work, fixing 
the V4L2 API implementation, which has several issues.

...

> > Video devices
> > =============
> > 
> > Currently, 10 video? devices are created:
> > 
> > 	$ for i in $(ls /dev/video*|sort -k2 -to -n); do echo -n $i:; v4l2-ctl -D -d $i|grep Name; done
> > 	/dev/video0:	Name             : ATOMISP ISP CAPTURE output
> > 	/dev/video1:	Name             : ATOMISP ISP VIEWFINDER output
> > 	/dev/video2:	Name             : ATOMISP ISP PREVIEW output
> > 	/dev/video3:	Name             : ATOMISP ISP VIDEO output
> > 	/dev/video4:	Name             : ATOMISP ISP ACC
> > 	/dev/video5:	Name             : ATOMISP ISP MEMORY input
> > 	/dev/video6:	Name             : ATOMISP ISP CAPTURE output
> > 	/dev/video7:	Name             : ATOMISP ISP VIEWFINDER output
> > 	/dev/video8:	Name             : ATOMISP ISP PREVIEW output
> > 	/dev/video9:	Name             : ATOMISP ISP VIDEO output
> > 	/dev/video10:	Name             : ATOMISP ISP ACC
> > 
> > That seems to be written to satisfy some Android-based app, but we don't
> > really need all of those.
> > 
> > I'm thinking to comment out the part of the code which creates all of those,
> > keeping just "ATOMISP ISP PREVIEW output", as I don't think we need all
> > of those.  
> 
> Why is that ? Being able to capture multiple streams in different
> resolutions is important for lots of applications, the viewfinder
> resolution is often different than the video streaming and/or still
> capture resolution. Scaling after capture is often expensive (and there
> are memory bandwidth and power constraints to take into account too). A
> single-stream device may be better than nothing, but it's time to move
> to the 21st century.

True, but having multiple videonodes at this moment is not helping,
specially since only one of such modes (PREVIEW) is actually working at
the moment.

So, this is more a strategy to help focusing on making this work
properly, and not a statement that those modules would be dropped.

I'd say that the "final" version of atomisp - once it gets 
fixed, cleaned up and started being MC-controlled - should support
all such features, and have the pipelines setup via libcamera.

Regards,
Mauro

^ permalink raw reply

* [PATCH v4 2/5] media: imx: Store the type of hardware implementation
From: Dorota Czaplejewicz @ 2021-11-04 11:43 UTC (permalink / raw)
  To: Steve Longerbeam, Philipp Zabel, Mauro Carvalho Chehab,
	Greg Kroah-Hartman, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	linux-media, linux-staging, linux-arm-kernel, linux-kernel,
	kernel, phone-devel
In-Reply-To: <20211104113631.206899-1-dorota.czaplejewicz@puri.sm>

[-- Attachment #1: Type: text/plain, Size: 4623 bytes --]

The driver covers i.MX5/6, as well as i.MX7/8 hardware.
Those implementations differ, e.g. in the sizes of buffers they accept.

Some functionality should be abstracted, and storing type achieves that.

Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
---
 drivers/staging/media/imx/imx-ic-prpencvf.c   | 3 ++-
 drivers/staging/media/imx/imx-media-capture.c | 5 ++++-
 drivers/staging/media/imx/imx-media-csi.c     | 3 ++-
 drivers/staging/media/imx/imx-media.h         | 8 +++++++-
 drivers/staging/media/imx/imx7-media-csi.c    | 3 ++-
 5 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
index d990553de87b..e06f5fbe5174 100644
--- a/drivers/staging/media/imx/imx-ic-prpencvf.c
+++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
@@ -1265,7 +1265,8 @@ static int prp_registered(struct v4l2_subdev *sd)
 
 	priv->vdev = imx_media_capture_device_init(ic_priv->ipu_dev,
 						   &ic_priv->sd,
-						   PRPENCVF_SRC_PAD, true);
+						   PRPENCVF_SRC_PAD, true,
+						   DEVICE_TYPE_IMX56);
 	if (IS_ERR(priv->vdev))
 		return PTR_ERR(priv->vdev);
 
diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
index 93ba09236010..65dc95a48ecc 100644
--- a/drivers/staging/media/imx/imx-media-capture.c
+++ b/drivers/staging/media/imx/imx-media-capture.c
@@ -34,6 +34,7 @@ struct capture_priv {
 
 	struct imx_media_video_dev vdev;	/* Video device */
 	struct media_pad vdev_pad;		/* Video device pad */
+	enum imx_media_device_type type;	/* Type of hardware implementation */
 
 	struct v4l2_subdev *src_sd;		/* Source subdev */
 	int src_sd_pad;				/* Source subdev pad */
@@ -957,7 +958,8 @@ EXPORT_SYMBOL_GPL(imx_media_capture_device_unregister);
 
 struct imx_media_video_dev *
 imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd,
-			      int pad, bool legacy_api)
+			      int pad, bool legacy_api,
+			      enum imx_media_device_type type)
 {
 	struct capture_priv *priv;
 	struct video_device *vfd;
@@ -972,6 +974,7 @@ imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd,
 	priv->src_sd_pad = pad;
 	priv->dev = dev;
 	priv->legacy_api = legacy_api;
+	priv->type = type;
 
 	mutex_init(&priv->mutex);
 	INIT_LIST_HEAD(&priv->ready_q);
diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
index 6a94fff49bf6..b6758c3787c7 100644
--- a/drivers/staging/media/imx/imx-media-csi.c
+++ b/drivers/staging/media/imx/imx-media-csi.c
@@ -1794,7 +1794,8 @@ static int csi_registered(struct v4l2_subdev *sd)
 	}
 
 	priv->vdev = imx_media_capture_device_init(priv->sd.dev, &priv->sd,
-						   CSI_SRC_PAD_IDMAC, true);
+						   CSI_SRC_PAD_IDMAC, true,
+						   DEVICE_TYPE_IMX56);
 	if (IS_ERR(priv->vdev)) {
 		ret = PTR_ERR(priv->vdev);
 		goto free_fim;
diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
index d2a150aac6cd..08e0c94e2de1 100644
--- a/drivers/staging/media/imx/imx-media.h
+++ b/drivers/staging/media/imx/imx-media.h
@@ -96,6 +96,11 @@ enum imx_pixfmt_sel {
 	PIXFMT_SEL_ANY = PIXFMT_SEL_YUV | PIXFMT_SEL_RGB | PIXFMT_SEL_BAYER,
 };
 
+enum imx_media_device_type {
+	DEVICE_TYPE_IMX56,
+	DEVICE_TYPE_IMX78,
+};
+
 struct imx_media_buffer {
 	struct vb2_v4l2_buffer vbuf; /* v4l buffer must be first */
 	struct list_head  list;
@@ -282,7 +287,8 @@ int imx_media_ic_unregister(struct v4l2_subdev *sd);
 /* imx-media-capture.c */
 struct imx_media_video_dev *
 imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd,
-			      int pad, bool legacy_api);
+			      int pad, bool legacy_api,
+			      enum imx_media_device_type type);
 void imx_media_capture_device_remove(struct imx_media_video_dev *vdev);
 int imx_media_capture_device_register(struct imx_media_video_dev *vdev,
 				      u32 link_flags);
diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
index d7dc0d8edf50..1a11f07620e9 100644
--- a/drivers/staging/media/imx/imx7-media-csi.c
+++ b/drivers/staging/media/imx/imx7-media-csi.c
@@ -1012,7 +1012,8 @@ static int imx7_csi_registered(struct v4l2_subdev *sd)
 	}
 
 	csi->vdev = imx_media_capture_device_init(csi->sd.dev, &csi->sd,
-						  IMX7_CSI_PAD_SRC, false);
+						  IMX7_CSI_PAD_SRC, false,
+						  DEVICE_TYPE_IMX78);
 	if (IS_ERR(csi->vdev))
 		return PTR_ERR(csi->vdev);
 
-- 
2.31.1


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related

* [PATCH v4 4/5] media: imx: Use dedicated format handler for i.MX7/8
From: Dorota Czaplejewicz @ 2021-11-04 11:43 UTC (permalink / raw)
  To: Steve Longerbeam, Philipp Zabel, Mauro Carvalho Chehab,
	Greg Kroah-Hartman, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	linux-media, linux-staging, linux-arm-kernel, linux-kernel,
	kernel, phone-devel
In-Reply-To: <20211104113631.206899-1-dorota.czaplejewicz@puri.sm>

[-- Attachment #1: Type: text/plain, Size: 3003 bytes --]

This splits out a format handler which takes into account
the capabilities of the i.MX7/8 video device,
as opposed to the default handler compatible with both i.MX5/6 and i.MX7/8.

Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
---
 drivers/staging/media/imx/imx-media-utils.c | 58 +++++++++++++++++++--
 1 file changed, 54 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
index 8b5c6bcfd4fa..c0a84c79947e 100644
--- a/drivers/staging/media/imx/imx-media-utils.c
+++ b/drivers/staging/media/imx/imx-media-utils.c
@@ -516,10 +516,9 @@ void imx_media_try_colorimetry(struct v4l2_mbus_framefmt *tryfmt,
 }
 EXPORT_SYMBOL_GPL(imx_media_try_colorimetry);
 
-int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
-				  const struct v4l2_mbus_framefmt *mbus,
-				  const struct imx_media_pixfmt *cc,
-				  enum imx_media_device_type type)
+static int imx56_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
+					   const struct v4l2_mbus_framefmt *mbus,
+					   const struct imx_media_pixfmt *cc)
 {
 	u32 width;
 	u32 stride;
@@ -568,6 +567,57 @@ int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
 
 	return 0;
 }
+
+static int imx78_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
+					   const struct v4l2_mbus_framefmt *mbus,
+					   const struct imx_media_pixfmt *cc)
+{
+	int ret;
+
+	if (!cc)
+		cc = imx_media_find_mbus_format(mbus->code, PIXFMT_SEL_ANY);
+
+	if (!cc)
+		return -EINVAL;
+	/*
+	 * The hardware can handle line lengths divisible by 4 pixels
+	 * as long as the whole buffer size ends up divisible by 8 bytes.
+	 * If not, use the value of 8 pixels recommended in the datasheet.
+	 */
+	ret = v4l2_fill_pixfmt(pix, cc->fourcc,
+			       round_up(mbus->width, 4), mbus->height);
+	if (ret)
+		return ret;
+
+	/* Only 8bits-per-pixel formats may need to get aligned to 8 pixels,
+	 * because both 10-bit and 16-bit pixels occupy 2 bytes.
+	 * In those, 4-pixel aligmnent is equal to 8-byte alignment.
+	 */
+	if (pix->sizeimage % 8 != 0)
+		ret = v4l2_fill_pixfmt(pix, cc->fourcc,
+				       round_up(mbus->width, 8), mbus->height);
+
+	pix->colorspace = mbus->colorspace;
+	pix->xfer_func = mbus->xfer_func;
+	pix->ycbcr_enc = mbus->ycbcr_enc;
+	pix->quantization = mbus->quantization;
+	pix->field = mbus->field;
+
+	return ret;
+}
+
+int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
+				  const struct v4l2_mbus_framefmt *mbus,
+				  const struct imx_media_pixfmt *cc,
+				  enum imx_media_device_type type) {
+	switch (type) {
+	case DEVICE_TYPE_IMX56:
+		return imx56_media_mbus_fmt_to_pix_fmt(pix, mbus, cc);
+	case DEVICE_TYPE_IMX78:
+		return imx78_media_mbus_fmt_to_pix_fmt(pix, mbus, cc);
+	}
+	return -EINVAL;
+}
 EXPORT_SYMBOL_GPL(imx_media_mbus_fmt_to_pix_fmt);
 
 void imx_media_free_dma_buf(struct device *dev,
-- 
2.31.1


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related

* [PATCH v4 3/5] media: imx: Forward type of hardware implementation
From: Dorota Czaplejewicz @ 2021-11-04 11:43 UTC (permalink / raw)
  To: Steve Longerbeam, Philipp Zabel, Mauro Carvalho Chehab,
	Greg Kroah-Hartman, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	linux-media, linux-staging, linux-arm-kernel, linux-kernel,
	kernel, phone-devel
In-Reply-To: <20211104113631.206899-1-dorota.czaplejewicz@puri.sm>

[-- Attachment #1: Type: text/plain, Size: 3904 bytes --]

Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
---
 drivers/staging/media/imx/imx-media-capture.c | 15 +++++++++------
 drivers/staging/media/imx/imx-media-utils.c   |  3 ++-
 drivers/staging/media/imx/imx-media.h         |  3 ++-
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
index 65dc95a48ecc..7a6384b3e5e6 100644
--- a/drivers/staging/media/imx/imx-media-capture.c
+++ b/drivers/staging/media/imx/imx-media-capture.c
@@ -139,7 +139,8 @@ static int capture_g_fmt_vid_cap(struct file *file, void *fh,
 }
 
 static const struct imx_media_pixfmt *
-__capture_try_fmt(struct v4l2_pix_format *pixfmt, struct v4l2_rect *compose)
+__capture_try_fmt(struct v4l2_pix_format *pixfmt, struct v4l2_rect *compose,
+		  enum imx_media_device_type type)
 {
 	struct v4l2_mbus_framefmt fmt_src;
 	const struct imx_media_pixfmt *cc;
@@ -171,7 +172,7 @@ __capture_try_fmt(struct v4l2_pix_format *pixfmt, struct v4l2_rect *compose)
 	}
 
 	v4l2_fill_mbus_format(&fmt_src, pixfmt, 0);
-	imx_media_mbus_fmt_to_pix_fmt(pixfmt, &fmt_src, cc);
+	imx_media_mbus_fmt_to_pix_fmt(pixfmt, &fmt_src, cc, type);
 
 	if (compose) {
 		compose->width = fmt_src.width;
@@ -184,7 +185,9 @@ __capture_try_fmt(struct v4l2_pix_format *pixfmt, struct v4l2_rect *compose)
 static int capture_try_fmt_vid_cap(struct file *file, void *fh,
 				   struct v4l2_format *f)
 {
-	__capture_try_fmt(&f->fmt.pix, NULL);
+	struct capture_priv *priv = video_drvdata(file);
+
+	__capture_try_fmt(&f->fmt.pix, NULL, priv->type);
 	return 0;
 }
 
@@ -199,7 +202,7 @@ static int capture_s_fmt_vid_cap(struct file *file, void *fh,
 		return -EBUSY;
 	}
 
-	cc = __capture_try_fmt(&f->fmt.pix, &priv->vdev.compose);
+	cc = __capture_try_fmt(&f->fmt.pix, &priv->vdev.compose, priv->type);
 
 	priv->vdev.cc = cc;
 	priv->vdev.fmt = f->fmt.pix;
@@ -418,7 +421,7 @@ __capture_legacy_try_fmt(struct capture_priv *priv,
 		}
 	}
 
-	imx_media_mbus_fmt_to_pix_fmt(pixfmt, &fmt_src->format, cc);
+	imx_media_mbus_fmt_to_pix_fmt(pixfmt, &fmt_src->format, cc, priv->type);
 
 	return cc;
 }
@@ -889,7 +892,7 @@ static int capture_init_format(struct capture_priv *priv)
 		fmt_src.format.height = IMX_MEDIA_DEF_PIX_HEIGHT;
 	}
 
-	imx_media_mbus_fmt_to_pix_fmt(&vdev->fmt, &fmt_src.format, NULL);
+	imx_media_mbus_fmt_to_pix_fmt(&vdev->fmt, &fmt_src.format, NULL, priv->type);
 	vdev->compose.width = fmt_src.format.width;
 	vdev->compose.height = fmt_src.format.height;
 
diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
index afa96e05ea7f..8b5c6bcfd4fa 100644
--- a/drivers/staging/media/imx/imx-media-utils.c
+++ b/drivers/staging/media/imx/imx-media-utils.c
@@ -518,7 +518,8 @@ EXPORT_SYMBOL_GPL(imx_media_try_colorimetry);
 
 int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
 				  const struct v4l2_mbus_framefmt *mbus,
-				  const struct imx_media_pixfmt *cc)
+				  const struct imx_media_pixfmt *cc,
+				  enum imx_media_device_type type)
 {
 	u32 width;
 	u32 stride;
diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
index 08e0c94e2de1..79adab775739 100644
--- a/drivers/staging/media/imx/imx-media.h
+++ b/drivers/staging/media/imx/imx-media.h
@@ -203,7 +203,8 @@ void imx_media_try_colorimetry(struct v4l2_mbus_framefmt *tryfmt,
 			       bool ic_route);
 int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
 				  const struct v4l2_mbus_framefmt *mbus,
-				  const struct imx_media_pixfmt *cc);
+				  const struct imx_media_pixfmt *cc,
+				  enum imx_media_device_type type);
 void imx_media_grp_id_to_sd_name(char *sd_name, int sz,
 				 u32 grp_id, int ipu_id);
 struct v4l2_subdev *
-- 
2.31.1


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related

* [PATCH v4 5/5] media: imx: Fail conversion if pixel format not supported
From: Dorota Czaplejewicz @ 2021-11-04 11:43 UTC (permalink / raw)
  To: Steve Longerbeam, Philipp Zabel, Mauro Carvalho Chehab,
	Greg Kroah-Hartman, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	linux-media, linux-staging, linux-arm-kernel, linux-kernel,
	kernel, phone-devel
In-Reply-To: <20211104113631.206899-1-dorota.czaplejewicz@puri.sm>

[-- Attachment #1: Type: text/plain, Size: 820 bytes --]

imx_media_find_mbus_format has NULL as a valid return value,
therefore the caller should take it into account.

Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
---
 drivers/staging/media/imx/imx-media-utils.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
index c0a84c79947e..8646f6ba1108 100644
--- a/drivers/staging/media/imx/imx-media-utils.c
+++ b/drivers/staging/media/imx/imx-media-utils.c
@@ -544,6 +544,9 @@ static int imx56_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
 		cc = imx_media_find_mbus_format(code, PIXFMT_SEL_YUV);
 	}
 
+	if (!cc)
+		return -EINVAL;
+
 	/* Round up width for minimum burst size */
 	width = round_up(mbus->width, 8);
 
-- 
2.31.1


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related

* Re: [PATCHv2 4/4] media: imx: Use dedicated format handler for i.MX7/8
From: Dorota Czaplejewicz @ 2021-11-04 11:45 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Steve Longerbeam, Philipp Zabel, Mauro Carvalho Chehab,
	Greg Kroah-Hartman, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	linux-media, linux-staging, linux-arm-kernel, linux-kernel,
	kernel, phone-devel
In-Reply-To: <20211103104100.GM2794@kadam>

[-- Attachment #1: Type: text/plain, Size: 2511 bytes --]

Hi,

On Wed, 3 Nov 2021 13:41:00 +0300
Dan Carpenter <dan.carpenter@oracle.com> wrote:

> On Sun, Oct 17, 2021 at 01:08:37PM +0200, Dorota Czaplejewicz wrote:
> > +static int imx78_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
> > +					   const struct v4l2_mbus_framefmt *mbus,
> > +					   const struct imx_media_pixfmt *cc)
> > +{
> > +	u32 width;
> > +	u32 stride;
> > +	u8 divisor;
> > +
> > +	if (!cc) {
> > +		cc = imx_media_find_ipu_format(mbus->code,
> > +					       PIXFMT_SEL_YUV_RGB);
> > +		if (!cc)
> > +			cc = imx_media_find_mbus_format(mbus->code,
> > +							PIXFMT_SEL_ANY);
> > +		if (!cc)
> > +			return -EINVAL;
> > +	}
> > +
> > +	/*
> > +	 * TODO: the IPU currently does not support the AYUV32 format,
> > +	 * so until it does convert to a supported YUV format.
> > +	 */
> > +	if (cc->ipufmt && cc->cs == IPUV3_COLORSPACE_YUV) {
> > +		u32 code;
> > +
> > +		imx_media_enum_mbus_formats(&code, 0, PIXFMT_SEL_YUV);
> > +		cc = imx_media_find_mbus_format(code, PIXFMT_SEL_YUV);  
> 
> Do we need a if (!cc) NULL check after this assignment?

In v3 of this series, this statement is only present in the IMX56 code path, which is unmodified compared to the original.

However, there's a missing check in the IMX78. I'm not sure if those can fail in practice, but for the sake of correctness, I rolled out an updated v4 series, where both checks are present. Message-id: 20211104113631.206899-1-dorota.czaplejewicz@puri.sm

Cheers,
Dorota
> 
> > +	}
> > +
> > +	/*
> > +	 * The hardware can handle line lengths divisible by 4 bytes,
> > +	 * as long as the number of lines is even.
> > +	 * Otherwise, use the value of 8 bytes recommended in the datasheet.
> > +	 */
> > +	divisor = 4 << (mbus->height % 2);
> > +
> > +	width = round_up(mbus->width, divisor);
> > +
> > +	if (cc->planar)
> > +		stride = round_up(width, 16);
> > +	else
> > +		stride = round_up((width * cc->bpp) >> 3, divisor);
> > +
> > +	pix->width = width;
> > +	pix->height = mbus->height;
> > +	pix->pixelformat = cc->fourcc;
> > +	pix->colorspace = mbus->colorspace;
> > +	pix->xfer_func = mbus->xfer_func;
> > +	pix->ycbcr_enc = mbus->ycbcr_enc;
> > +	pix->quantization = mbus->quantization;
> > +	pix->field = mbus->field;
> > +	pix->bytesperline = stride;
> > +	pix->sizeimage = cc->planar ? ((stride * pix->height * cc->bpp) >> 3) :
> > +			 stride * pix->height;
> > +
> > +	return 0;
> > +}  
> 
> regards,
> dan carpenter


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply

* [PATCH v4 1/5] media: imx: Remove unused functions
From: Dorota Czaplejewicz @ 2021-11-04 11:41 UTC (permalink / raw)
  To: Steve Longerbeam, Philipp Zabel, Mauro Carvalho Chehab,
	Greg Kroah-Hartman, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	linux-media, linux-staging, linux-arm-kernel, linux-kernel,
	kernel, phone-devel

[-- Attachment #1: Type: text/plain, Size: 2952 bytes --]

Neither imx_media_mbus_fmt_to_ipu_image nor imx_media_ipu_image_to_mbus_fmt
were used anywhere.

Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
---

Hi,

Compared to v3, this patch series introduces the checks of imx_media_find_mbus_format return values in patch 4 and 5.

Cheers,
Dorota

 drivers/staging/media/imx/imx-media-utils.c | 42 ---------------------
 drivers/staging/media/imx/imx-media.h       |  4 --
 2 files changed, 46 deletions(-)

diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
index 5128915a5d6f..afa96e05ea7f 100644
--- a/drivers/staging/media/imx/imx-media-utils.c
+++ b/drivers/staging/media/imx/imx-media-utils.c
@@ -569,48 +569,6 @@ int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
 }
 EXPORT_SYMBOL_GPL(imx_media_mbus_fmt_to_pix_fmt);
 
-int imx_media_mbus_fmt_to_ipu_image(struct ipu_image *image,
-				    const struct v4l2_mbus_framefmt *mbus)
-{
-	int ret;
-
-	memset(image, 0, sizeof(*image));
-
-	ret = imx_media_mbus_fmt_to_pix_fmt(&image->pix, mbus, NULL);
-	if (ret)
-		return ret;
-
-	image->rect.width = mbus->width;
-	image->rect.height = mbus->height;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(imx_media_mbus_fmt_to_ipu_image);
-
-int imx_media_ipu_image_to_mbus_fmt(struct v4l2_mbus_framefmt *mbus,
-				    const struct ipu_image *image)
-{
-	const struct imx_media_pixfmt *fmt;
-
-	fmt = imx_media_find_pixel_format(image->pix.pixelformat,
-					  PIXFMT_SEL_ANY);
-	if (!fmt || !fmt->codes || !fmt->codes[0])
-		return -EINVAL;
-
-	memset(mbus, 0, sizeof(*mbus));
-	mbus->width = image->pix.width;
-	mbus->height = image->pix.height;
-	mbus->code = fmt->codes[0];
-	mbus->field = image->pix.field;
-	mbus->colorspace = image->pix.colorspace;
-	mbus->xfer_func = image->pix.xfer_func;
-	mbus->ycbcr_enc = image->pix.ycbcr_enc;
-	mbus->quantization = image->pix.quantization;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(imx_media_ipu_image_to_mbus_fmt);
-
 void imx_media_free_dma_buf(struct device *dev,
 			    struct imx_media_dma_buf *buf)
 {
diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
index 492d9a64e704..d2a150aac6cd 100644
--- a/drivers/staging/media/imx/imx-media.h
+++ b/drivers/staging/media/imx/imx-media.h
@@ -199,10 +199,6 @@ void imx_media_try_colorimetry(struct v4l2_mbus_framefmt *tryfmt,
 int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
 				  const struct v4l2_mbus_framefmt *mbus,
 				  const struct imx_media_pixfmt *cc);
-int imx_media_mbus_fmt_to_ipu_image(struct ipu_image *image,
-				    const struct v4l2_mbus_framefmt *mbus);
-int imx_media_ipu_image_to_mbus_fmt(struct v4l2_mbus_framefmt *mbus,
-				    const struct ipu_image *image);
 void imx_media_grp_id_to_sd_name(char *sd_name, int sz,
 				 u32 grp_id, int ipu_id);
 struct v4l2_subdev *
-- 
2.31.1


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related

* [PATCH 0/7] Address issues preventing camorama to work with atomisp
From: Mauro Carvalho Chehab @ 2021-11-04 12:05 UTC (permalink / raw)
  Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Sakari Ailus,
	linux-kernel, linux-media, linux-staging

This patch series address some issues at atomisp that are preventing camorama
to work with atomisp driver.

After this series, I can use camorama just like on any other device. The frame
rate is slow (~7fps), though. Not sure if this is due to some sensor limitation or
because of some other issue.

Anyway this is a start :-)

Some notes:

1. Patch 1 fixes an issue at ov2680 logic. It probably needs to be reflected at the
   other supported sensors;

2. MMAP is not working. So, it requires a newer version of camorama that has
   support for USERPTR.

3. There's nothing special on Camorama for atomisp, except that it has support
   for USERPTR.

4. Camorama currently doesn't allow changing the resolution of the camera.
   That's because of several things:

   a. The driver has a scaler, supporting resolutions from 32x16 to 1600x1200
      on Asus T101HA.
   b. The atomisp driver doesn't implement ENUM_FRAMEINTERVALS;
   c. camorama is not prepared for cameras with scalers on it. It just lets one to
      select the resolutions enumerated by  ENUM_FRAMEINTERVALS.

Mauro Carvalho Chehab (7):
  media: atomisp-ov2680: use v4l2_find_nearest_size()
  media: atomisp: move a debug printf to a better place
  media: atomisp: fix VIDIOC_S_FMT logic
  media: atomisp: fix enum_fmt logic
  media: atomisp: move atomisp_g_fmt_cap()
  media: atomisp: fix try_fmt logic
  media: atomisp: fix g_fmt logic

 .../media/atomisp/i2c/atomisp-ov2680.c        | 127 +++-----------
 drivers/staging/media/atomisp/i2c/ov2680.h    |   3 +-
 .../staging/media/atomisp/pci/atomisp_cmd.c   |  59 +++++--
 .../staging/media/atomisp/pci/atomisp_ioctl.c | 157 ++++++++++--------
 4 files changed, 162 insertions(+), 184 deletions(-)

-- 
2.31.1



^ permalink raw reply

* [PATCH 3/7] media: atomisp: fix VIDIOC_S_FMT logic
From: Mauro Carvalho Chehab @ 2021-11-04 12:05 UTC (permalink / raw)
  Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Alex Dewar,
	Aline Santana Cordeiro, Arnd Bergmann, Greg Kroah-Hartman,
	Hans Verkuil, Mauro Carvalho Chehab, Sakari Ailus, Tomi Valkeinen,
	Tsuchiya Yuto, Yang Li, linux-kernel, linux-media, linux-staging
In-Reply-To: <cover.1636026959.git.mchehab+huawei@kernel.org>

There are several issues on S_FMT implementation:

- it doesn't properly handle pad_h/pad_w;
- it reports a wrong visible size to userspace;
- it allows setting the format to a raw mode, which
  currently causes the pipeline to break.

Address such issues, for it to start working with generic
apps.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---

To mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/7] at: https://lore.kernel.org/all/cover.1636026959.git.mchehab+huawei@kernel.org/

 .../staging/media/atomisp/pci/atomisp_cmd.c   | 46 ++++++++++++++++++-
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
index 76c9e89afb48..851046ecbdbf 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
@@ -5635,13 +5635,17 @@ int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f)
 	const struct atomisp_format_bridge *format_bridge;
 	const struct atomisp_format_bridge *snr_format_bridge;
 	struct ia_css_frame_info output_info, raw_output_info;
-	struct v4l2_pix_format snr_fmt = f->fmt.pix;
-	struct v4l2_pix_format backup_fmt = snr_fmt, s_fmt;
+	struct v4l2_pix_format snr_fmt;
+	struct v4l2_pix_format backup_fmt, s_fmt;
 	unsigned int dvs_env_w = 0, dvs_env_h = 0;
 	unsigned int padding_w = pad_w, padding_h = pad_h;
 	bool res_overflow = false, crop_needs_override = false;
 	struct v4l2_mbus_framefmt *isp_sink_fmt;
 	struct v4l2_mbus_framefmt isp_source_fmt = {0};
+	struct v4l2_subdev_format vformat = {
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
+	struct v4l2_mbus_framefmt *ffmt = &vformat.format;
 	struct v4l2_rect isp_sink_crop;
 	u16 source_pad = atomisp_subdev_source_pad(vdev);
 	struct v4l2_subdev_fh fh;
@@ -5672,9 +5676,38 @@ int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f)
 	if (!format_bridge)
 		return -EINVAL;
 
+	/* Currently, raw formats are broken!!! */
+
+	if (format_bridge->sh_fmt == IA_CSS_FRAME_FORMAT_RAW) {
+		f->fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
+
+		format_bridge = atomisp_get_format_bridge(f->fmt.pix.pixelformat);
+		if (!format_bridge)
+			return -EINVAL;
+	}
 	pipe->sh_fmt = format_bridge->sh_fmt;
 	pipe->pix.pixelformat = f->fmt.pix.pixelformat;
 
+	/* Ensure that the resolution is equal or below the maximum supported */
+
+	vformat.which = V4L2_SUBDEV_FORMAT_ACTIVE;
+	v4l2_fill_mbus_format(ffmt, &f->fmt.pix, format_bridge->mbus_code);
+	ffmt->height += padding_h;
+	ffmt->width += padding_w;
+
+	ret = v4l2_subdev_call(isp->inputs[asd->input_curr].camera, pad,
+			       set_fmt, NULL, &vformat);
+	if (ret)
+		return ret;
+
+	f->fmt.pix.width = ffmt->width - padding_w;
+	f->fmt.pix.height = ffmt->height - padding_h;
+
+	snr_fmt = f->fmt.pix;
+	backup_fmt = snr_fmt;
+
+	/**********************************************************************/
+
 	if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_VF ||
 	    (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW
 	     && asd->run_mode->val == ATOMISP_RUN_MODE_VIDEO)) {
@@ -6080,6 +6113,15 @@ int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f)
 	else
 		isp->need_gfx_throttle = true;
 
+	/* Report the needed sizes */
+	f->fmt.pix.sizeimage = pipe->pix.sizeimage;
+	f->fmt.pix.bytesperline = pipe->pix.bytesperline;
+
+	dev_dbg(isp->dev, "%s: %dx%d, image size: %d, %d bytes per line\n",
+		__func__,
+		f->fmt.pix.width, f->fmt.pix.height,
+		f->fmt.pix.sizeimage, f->fmt.pix.bytesperline);
+
 	return 0;
 }
 
-- 
2.31.1


^ permalink raw reply related

* [PATCH 4/7] media: atomisp: fix enum_fmt logic
From: Mauro Carvalho Chehab @ 2021-11-04 12:05 UTC (permalink / raw)
  Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Andy Shevchenko,
	Dan Carpenter, Greg Kroah-Hartman, Kaixu Xia,
	Mauro Carvalho Chehab, Peter Zijlstra, Sakari Ailus,
	Thomas Gleixner, Tsuchiya Yuto, linux-kernel, linux-media,
	linux-staging
In-Reply-To: <cover.1636026959.git.mchehab+huawei@kernel.org>

Currently, the enum lists the sensor's native format as a
supported format. However, trying to setup a pipeline using
it doesn't work.

So, exclude such formats from the enum.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---

To mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/7] at: https://lore.kernel.org/all/cover.1636026959.git.mchehab+huawei@kernel.org/

 drivers/staging/media/atomisp/pci/atomisp_ioctl.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
index 8df052f6190d..30483a84ed80 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
@@ -775,6 +775,7 @@ static int atomisp_enum_fmt_cap(struct file *file, void *fh,
 	struct v4l2_subdev_mbus_code_enum code = {
 		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
 	};
+	const struct atomisp_format_bridge *format;
 	struct v4l2_subdev *camera;
 	unsigned int i, fi = 0;
 	int rval;
@@ -806,15 +807,15 @@ static int atomisp_enum_fmt_cap(struct file *file, void *fh,
 		return rval;
 
 	for (i = 0; i < ARRAY_SIZE(atomisp_output_fmts); i++) {
-		const struct atomisp_format_bridge *format =
-			    &atomisp_output_fmts[i];
+		format = &atomisp_output_fmts[i];
 
 		/*
 		 * Is the atomisp-supported format is valid for the
 		 * sensor (configuration)? If not, skip it.
+		 *
+		 * FIXME: fix the pipeline to allow sensor format too.
 		 */
-		if (format->sh_fmt == IA_CSS_FRAME_FORMAT_RAW
-		    && format->mbus_code != code.code)
+		if (format->sh_fmt == IA_CSS_FRAME_FORMAT_RAW)
 			continue;
 
 		/* Found a match. Now let's pick f->index'th one. */
-- 
2.31.1


^ permalink raw reply related

* [PATCH 5/7] media: atomisp: move atomisp_g_fmt_cap()
From: Mauro Carvalho Chehab @ 2021-11-04 12:05 UTC (permalink / raw)
  Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Arnd Bergmann,
	Dan Carpenter, Greg Kroah-Hartman, Ingo Molnar,
	Mauro Carvalho Chehab, Peter Zijlstra, Sakari Ailus,
	Tsuchiya Yuto, linux-kernel, linux-media, linux-staging
In-Reply-To: <cover.1636026959.git.mchehab+huawei@kernel.org>

move atomisp_g_fmt_cap() for it to be after try_fmt, as we'll
re-use try_fmt there.

No functional changes.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---

To mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/7] at: https://lore.kernel.org/all/cover.1636026959.git.mchehab+huawei@kernel.org/

 .../staging/media/atomisp/pci/atomisp_ioctl.c | 56 +++++++++----------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
index 30483a84ed80..84ff97dabbed 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
@@ -833,6 +833,34 @@ static int atomisp_enum_fmt_cap(struct file *file, void *fh,
 	return -EINVAL;
 }
 
+static int atomisp_g_fmt_file(struct file *file, void *fh,
+			      struct v4l2_format *f)
+{
+	struct video_device *vdev = video_devdata(file);
+	struct atomisp_device *isp = video_get_drvdata(vdev);
+	struct atomisp_video_pipe *pipe = atomisp_to_video_pipe(vdev);
+
+	rt_mutex_lock(&isp->mutex);
+	f->fmt.pix = pipe->pix;
+	rt_mutex_unlock(&isp->mutex);
+
+	return 0;
+}
+
+/* This function looks up the closest available resolution. */
+static int atomisp_try_fmt_cap(struct file *file, void *fh,
+			       struct v4l2_format *f)
+{
+	struct video_device *vdev = video_devdata(file);
+	struct atomisp_device *isp = video_get_drvdata(vdev);
+	int ret;
+
+	rt_mutex_lock(&isp->mutex);
+	ret = atomisp_try_fmt(vdev, &f->fmt.pix, NULL);
+	rt_mutex_unlock(&isp->mutex);
+	return ret;
+}
+
 static int atomisp_g_fmt_cap(struct file *file, void *fh,
 			     struct v4l2_format *f)
 {
@@ -907,34 +935,6 @@ static int atomisp_g_fmt_cap(struct file *file, void *fh,
 	return 0;
 }
 
-static int atomisp_g_fmt_file(struct file *file, void *fh,
-			      struct v4l2_format *f)
-{
-	struct video_device *vdev = video_devdata(file);
-	struct atomisp_device *isp = video_get_drvdata(vdev);
-	struct atomisp_video_pipe *pipe = atomisp_to_video_pipe(vdev);
-
-	rt_mutex_lock(&isp->mutex);
-	f->fmt.pix = pipe->pix;
-	rt_mutex_unlock(&isp->mutex);
-
-	return 0;
-}
-
-/* This function looks up the closest available resolution. */
-static int atomisp_try_fmt_cap(struct file *file, void *fh,
-			       struct v4l2_format *f)
-{
-	struct video_device *vdev = video_devdata(file);
-	struct atomisp_device *isp = video_get_drvdata(vdev);
-	int ret;
-
-	rt_mutex_lock(&isp->mutex);
-	ret = atomisp_try_fmt(vdev, &f->fmt.pix, NULL);
-	rt_mutex_unlock(&isp->mutex);
-	return ret;
-}
-
 static int atomisp_s_fmt_cap(struct file *file, void *fh,
 			     struct v4l2_format *f)
 {
-- 
2.31.1


^ permalink raw reply related

* [PATCH 7/7] media: atomisp: fix g_fmt logic
From: Mauro Carvalho Chehab @ 2021-11-04 12:05 UTC (permalink / raw)
  Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Arnd Bergmann,
	Dan Carpenter, Greg Kroah-Hartman, Kaixu Xia,
	Mauro Carvalho Chehab, Peter Zijlstra, Sakari Ailus,
	Tsuchiya Yuto, linux-kernel, linux-media, linux-staging
In-Reply-To: <cover.1636026959.git.mchehab+huawei@kernel.org>

The g_fmt logic is currently broken, as it is not returning
the same imagesize as previoulsy calculated by s_fmt.

Fix it by just re-using whatever it was defined at s_fmt,
if this was called before.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---

To mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/7] at: https://lore.kernel.org/all/cover.1636026959.git.mchehab+huawei@kernel.org/

 .../staging/media/atomisp/pci/atomisp_ioctl.c | 64 ++-----------------
 1 file changed, 7 insertions(+), 57 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
index 1e6da6116a06..2fb64d5cbead 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
@@ -934,75 +934,25 @@ static int atomisp_try_fmt_cap(struct file *file, void *fh,
 static int atomisp_g_fmt_cap(struct file *file, void *fh,
 			     struct v4l2_format *f)
 {
-	struct v4l2_subdev_format fmt = {
-		.which = V4L2_SUBDEV_FORMAT_ACTIVE
-	};
 	struct video_device *vdev = video_devdata(file);
 	struct atomisp_device *isp = video_get_drvdata(vdev);
-	struct v4l2_fmtdesc fmtdesc = { 0 };
 	struct atomisp_video_pipe *pipe;
-	struct atomisp_sub_device *asd;
-	struct v4l2_subdev *camera;
-	u32 depth;
-	int ret;
 
 	rt_mutex_lock(&isp->mutex);
 	pipe = atomisp_to_video_pipe(vdev);
 	rt_mutex_unlock(&isp->mutex);
 
 	f->fmt.pix = pipe->pix;
-	if (!f->fmt.pix.width) {
-		asd = atomisp_to_video_pipe(vdev)->asd;
-		if (!asd)
-		    return -EINVAL;
 
-		camera = isp->inputs[asd->input_curr].camera;
-		if(!camera)
-			return -EINVAL;
+	/* If s_fmt was issued, just return whatever is was previouly set */
+	if (f->fmt.pix.sizeimage)
+		return 0;
 
-		ret = atomisp_enum_fmt_cap(file, fh, &fmtdesc);
-		if (ret)
-			return ret;
+	f->fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
+	f->fmt.pix.width = 10000;
+	f->fmt.pix.height = 10000;
 
-		rt_mutex_lock(&isp->mutex);
-		ret = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
-				       pad, get_fmt, NULL, &fmt);
-		rt_mutex_unlock(&isp->mutex);
-		if (ret)
-			return ret;
-
-		v4l2_fill_pix_format(&f->fmt.pix, &fmt.format);
-
-		f->fmt.pix.pixelformat = fmtdesc.pixelformat;
-
-		/*
-		 * HACK: The atomisp does something different here, as it
-		 * seems to set the sensor to a slightly higher resolution than
-		 * the visible ones. That seems to be needed by atomisp's ISP
-		 * in order to properly handle the frames. So, s_fmt adds 16
-		 * extra columns/lines. See atomisp_subdev_set_selection().
-		 *
-		 * Yet, the V4L2 userspace API doesn't expect those, so it
-		 * needs to be decremented when reporting the visible
-		 * resolution to userspace.
-		 */
-		f->fmt.pix.width -= pad_w;
-		f->fmt.pix.height -= pad_h;
-	}
-
-	depth = atomisp_get_pixel_depth(f->fmt.pix.pixelformat);
-	f->fmt.pix.bytesperline = DIV_ROUND_UP(f->fmt.pix.width * depth, 8);
-	f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height * f->fmt.pix.bytesperline);
-
-	/*
-	 * FIXME: do we need to setup this differently, depending on the
-	 * sensor or the pipeline?
-	 */
-	f->fmt.pix.colorspace = V4L2_COLORSPACE_REC709;
-	f->fmt.pix.ycbcr_enc = V4L2_YCBCR_ENC_709;
-	f->fmt.pix.xfer_func = V4L2_XFER_FUNC_709;
-
-	return 0;
+	return atomisp_try_fmt_cap(file, fh, f);
 }
 
 static int atomisp_s_fmt_cap(struct file *file, void *fh,
-- 
2.31.1


^ permalink raw reply related

* [PATCH 2/7] media: atomisp: move a debug printf to a better place
From: Mauro Carvalho Chehab @ 2021-11-04 12:05 UTC (permalink / raw)
  Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Alex Dewar,
	Aline Santana Cordeiro, Arnd Bergmann, Greg Kroah-Hartman,
	Hans Verkuil, Laurent Pinchart, Mauro Carvalho Chehab,
	Sakari Ailus, Tomi Valkeinen, Tsuchiya Yuto, Yang Li,
	linux-kernel, linux-media, linux-staging
In-Reply-To: <cover.1636026959.git.mchehab+huawei@kernel.org>

The sensor width/height report is alread being printed after
its calculus. The only reason for an extra debug printk is
when dis is used. So, change its message to reflect and move
it to be inside the if checks.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---

To mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/7] at: https://lore.kernel.org/all/cover.1636026959.git.mchehab+huawei@kernel.org/

 drivers/staging/media/atomisp/pci/atomisp_cmd.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
index feb75491a273..76c9e89afb48 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
@@ -5583,6 +5583,10 @@ static int atomisp_set_fmt_to_snr(struct video_device *vdev,
 				       pad, set_fmt, &pad_state, &vformat);
 		if (ret)
 			return ret;
+
+		dev_dbg(isp->dev, "video dis: sensor width: %d, height: %d\n",
+			ffmt->width, ffmt->height);
+
 		if (ffmt->width < req_ffmt->width ||
 		    ffmt->height < req_ffmt->height) {
 			req_ffmt->height -= dvs_env_h;
@@ -5593,8 +5597,6 @@ static int atomisp_set_fmt_to_snr(struct video_device *vdev,
 			asd->params.video_dis_en = false;
 		}
 	}
-	dev_dbg(isp->dev, "sensor width: %d, height: %d\n",
-		ffmt->width, ffmt->height);
 	vformat.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 	ret = v4l2_subdev_call(isp->inputs[asd->input_curr].camera, pad,
 			       set_fmt, NULL, &vformat);
-- 
2.31.1


^ permalink raw reply related

* [PATCH 1/7] media: atomisp-ov2680: use v4l2_find_nearest_size()
From: Mauro Carvalho Chehab @ 2021-11-04 12:05 UTC (permalink / raw)
  Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Bhaskar Chowdhury,
	Deepak R Varma, Greg Kroah-Hartman, Hans Verkuil,
	Laurent Pinchart, Mauro Carvalho Chehab, Randy Dunlap,
	Sakari Ailus, Tomi Valkeinen, linux-kernel, linux-media,
	linux-staging
In-Reply-To: <cover.1636026959.git.mchehab+huawei@kernel.org>

Instead of reinventing the wheel, use v4l2_find_nearest_size()
in order to get the closest resolution.

This should address a bug where the wrong resolution was
selected.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---

To mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/7] at: https://lore.kernel.org/all/cover.1636026959.git.mchehab+huawei@kernel.org/

 .../media/atomisp/i2c/atomisp-ov2680.c        | 127 ++++--------------
 drivers/staging/media/atomisp/i2c/ov2680.h    |   3 +-
 2 files changed, 25 insertions(+), 105 deletions(-)

diff --git a/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c b/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c
index 2111e4a478c1..160efa432934 100644
--- a/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c
+++ b/drivers/staging/media/atomisp/i2c/atomisp-ov2680.c
@@ -147,7 +147,7 @@ static int ov2680_g_bin_factor_x(struct v4l2_subdev *sd, s32 *val)
 	struct i2c_client *client = v4l2_get_subdevdata(sd);
 
 	dev_dbg(&client->dev,  "++++ov2680_g_bin_factor_x\n");
-	*val = ov2680_res[dev->fmt_idx].bin_factor_x;
+	*val = dev->res->bin_factor_x;
 
 	return 0;
 }
@@ -157,7 +157,7 @@ static int ov2680_g_bin_factor_y(struct v4l2_subdev *sd, s32 *val)
 	struct ov2680_device *dev = to_ov2680_sensor(sd);
 	struct i2c_client *client = v4l2_get_subdevdata(sd);
 
-	*val = ov2680_res[dev->fmt_idx].bin_factor_y;
+	*val = dev->res->bin_factor_y;
 	dev_dbg(&client->dev,  "++++ov2680_g_bin_factor_y\n");
 	return 0;
 }
@@ -254,7 +254,7 @@ static long __ov2680_set_exposure(struct v4l2_subdev *sd, int coarse_itg,
 		"+++++++__ov2680_set_exposure coarse_itg %d, gain %d, digitgain %d++\n",
 		coarse_itg, gain, digitgain);
 
-	vts = ov2680_res[dev->fmt_idx].lines_per_frame;
+	vts = dev->res->lines_per_frame;
 
 	/* group hold */
 	ret = ov2680_write_reg(client, 1,
@@ -843,76 +843,6 @@ static int ov2680_s_power(struct v4l2_subdev *sd, int on)
 	return ret;
 }
 
-/*
- * distance - calculate the distance
- * @res: resolution
- * @w: width
- * @h: height
- *
- * Get the gap between resolution and w/h.
- * res->width/height smaller than w/h wouldn't be considered.
- * Returns the value of gap or -1 if fail.
- */
-#define LARGEST_ALLOWED_RATIO_MISMATCH 600
-static int distance(struct ov2680_resolution *res, u32 w, u32 h)
-{
-	unsigned int w_ratio = (res->width << 13) / w;
-	unsigned int h_ratio;
-	int match;
-
-	if (h == 0)
-		return -1;
-	h_ratio = (res->height << 13) / h;
-	if (h_ratio == 0)
-		return -1;
-	match   = abs(((w_ratio << 13) / h_ratio) - 8192);
-
-	if ((w_ratio < 8192) || (h_ratio < 8192)  ||
-	    (match > LARGEST_ALLOWED_RATIO_MISMATCH))
-		return -1;
-
-	return w_ratio + h_ratio;
-}
-
-/* Return the nearest higher resolution index */
-static int nearest_resolution_index(int w, int h)
-{
-	int i;
-	int idx = -1;
-	int dist;
-	int min_dist = INT_MAX;
-	struct ov2680_resolution *tmp_res = NULL;
-
-	for (i = 0; i < N_RES; i++) {
-		tmp_res = &ov2680_res[i];
-		dist = distance(tmp_res, w, h);
-		if (dist == -1)
-			continue;
-		if (dist < min_dist) {
-			min_dist = dist;
-			idx = i;
-		}
-	}
-
-	return idx;
-}
-
-static int get_resolution_index(int w, int h)
-{
-	int i;
-
-	for (i = 0; i < N_RES; i++) {
-		if (w != ov2680_res[i].width)
-			continue;
-		if (h != ov2680_res[i].height)
-			continue;
-
-		return i;
-	}
-
-	return -1;
-}
-
 static int ov2680_set_fmt(struct v4l2_subdev *sd,
 			  struct v4l2_subdev_state *sd_state,
 			  struct v4l2_subdev_format *format)
@@ -921,8 +851,8 @@ static int ov2680_set_fmt(struct v4l2_subdev *sd,
 	struct ov2680_device *dev = to_ov2680_sensor(sd);
 	struct i2c_client *client = v4l2_get_subdevdata(sd);
 	struct camera_mipi_info *ov2680_info = NULL;
+	static struct ov2680_resolution *res;
 	int ret = 0;
-	int idx = 0;
 
 	dev_dbg(&client->dev, "%s: %s: pad: %d, fmt: %p\n",
 		__func__,
@@ -940,41 +870,34 @@ static int ov2680_set_fmt(struct v4l2_subdev *sd,
 		return -EINVAL;
 
 	mutex_lock(&dev->input_lock);
-	idx = nearest_resolution_index(fmt->width, fmt->height);
-	if (idx == -1) {
-		/* return the largest resolution */
-		fmt->width = ov2680_res[N_RES - 1].width;
-		fmt->height = ov2680_res[N_RES - 1].height;
-	} else {
-		fmt->width = ov2680_res[idx].width;
-		fmt->height = ov2680_res[idx].height;
-	}
+
+	res = v4l2_find_nearest_size(ov2680_res_preview,
+				ARRAY_SIZE(ov2680_res_preview), width,
+				height, fmt->width, fmt->height);
+	if (!res)
+		res = &ov2680_res[N_RES - 1];
+
+	fmt->width = res->width;
+	fmt->height = res->height;
+
 	fmt->code = MEDIA_BUS_FMT_SBGGR10_1X10;
 	if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
 		sd_state->pads->try_fmt = *fmt;
 		mutex_unlock(&dev->input_lock);
 		return 0;
 	}
-	dev->fmt_idx = get_resolution_index(fmt->width, fmt->height);
-	dev_dbg(&client->dev, "%s: Resolution index: %d\n",
-		__func__, dev->fmt_idx);
-	if (dev->fmt_idx == -1) {
-		dev_err(&client->dev, "get resolution fail\n");
-		mutex_unlock(&dev->input_lock);
-		return -EINVAL;
-	}
-	dev_dbg(&client->dev, "%s: i=%d, w=%d, h=%d\n",
-		__func__, dev->fmt_idx, fmt->width, fmt->height);
+
+	dev_dbg(&client->dev, "%s: %dx%d\n",
+		__func__, fmt->width, fmt->height);
 
 	// IS IT NEEDED?
 	power_up(sd);
-	ret = ov2680_write_reg_array(client, ov2680_res[dev->fmt_idx].regs);
+	ret = ov2680_write_reg_array(client, dev->res->regs);
 	if (ret)
 		dev_err(&client->dev,
 			"ov2680 write resolution register err: %d\n", ret);
 
-	ret = ov2680_get_intg_factor(client, ov2680_info,
-				     &ov2680_res[dev->fmt_idx]);
+	ret = ov2680_get_intg_factor(client, ov2680_info, res);
 	if (ret) {
 		dev_err(&client->dev, "failed to get integration factor\n");
 		goto err;
@@ -989,8 +912,6 @@ static int ov2680_set_fmt(struct v4l2_subdev *sd,
 	if (v_flag)
 		ov2680_v_flip(sd, v_flag);
 
-	v4l2_info(client, "\n%s idx %d\n", __func__, dev->fmt_idx);
-
 	/*
 	 * ret = startup(sd);
 	 * if (ret)
@@ -1014,8 +935,8 @@ static int ov2680_get_fmt(struct v4l2_subdev *sd,
 	if (!fmt)
 		return -EINVAL;
 
-	fmt->width = ov2680_res[dev->fmt_idx].width;
-	fmt->height = ov2680_res[dev->fmt_idx].height;
+	fmt->width = dev->res->width;
+	fmt->height = dev->res->height;
 	fmt->code = MEDIA_BUS_FMT_SBGGR10_1X10;
 
 	return 0;
@@ -1155,7 +1076,7 @@ static int ov2680_g_frame_interval(struct v4l2_subdev *sd,
 	struct ov2680_device *dev = to_ov2680_sensor(sd);
 
 	interval->interval.numerator = 1;
-	interval->interval.denominator = ov2680_res[dev->fmt_idx].fps;
+	interval->interval.denominator = dev->res->fps;
 
 	return 0;
 }
@@ -1193,7 +1114,7 @@ static int ov2680_g_skip_frames(struct v4l2_subdev *sd, u32 *frames)
 	struct ov2680_device *dev = to_ov2680_sensor(sd);
 
 	mutex_lock(&dev->input_lock);
-	*frames = ov2680_res[dev->fmt_idx].skip_frames;
+	*frames = dev->res->skip_frames;
 	mutex_unlock(&dev->input_lock);
 
 	return 0;
@@ -1257,7 +1178,7 @@ static int ov2680_probe(struct i2c_client *client)
 
 	mutex_init(&dev->input_lock);
 
-	dev->fmt_idx = 0;
+	dev->res = &ov2680_res_preview[0];
 	v4l2_i2c_subdev_init(&dev->sd, client, &ov2680_ops);
 
 	pdata = gmin_camera_platform_data(&dev->sd,
diff --git a/drivers/staging/media/atomisp/i2c/ov2680.h b/drivers/staging/media/atomisp/i2c/ov2680.h
index 874115f35fca..535440ed14d7 100644
--- a/drivers/staging/media/atomisp/i2c/ov2680.h
+++ b/drivers/staging/media/atomisp/i2c/ov2680.h
@@ -172,11 +172,10 @@ struct ov2680_device {
 	struct v4l2_mbus_framefmt format;
 	struct mutex input_lock;
 	struct v4l2_ctrl_handler ctrl_handler;
+	struct ov2680_resolution *res;
 	struct camera_sensor_platform_data *platform_data;
 	int vt_pix_clk_freq_mhz;
-	int fmt_idx;
 	int run_mode;
-	u8 res;
 	u8 type;
 };
 
-- 
2.31.1


^ permalink raw reply related

* [PATCH 6/7] media: atomisp: fix try_fmt logic
From: Mauro Carvalho Chehab @ 2021-11-04 12:05 UTC (permalink / raw)
  Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Alex Dewar,
	Aline Santana Cordeiro, Arnd Bergmann, Greg Kroah-Hartman,
	Hans Verkuil, Kaixu Xia, Mauro Carvalho Chehab, Peter Zijlstra,
	Sakari Ailus, Thomas Gleixner, Tomi Valkeinen, Tsuchiya Yuto,
	linux-kernel, linux-media, linux-staging
In-Reply-To: <cover.1636026959.git.mchehab+huawei@kernel.org>

The internal try_fmt logic is not meant to provide everything
that the V4L2 API should provide. Also, it doesn't decrement
the pads that are used only internally by the driver, but aren't
part of the device's output.

Fix it.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---

To mailbombing on a large number of people, only mailing lists were C/C on the cover.
See [PATCH 0/7] at: https://lore.kernel.org/all/cover.1636026959.git.mchehab+huawei@kernel.org/

 .../staging/media/atomisp/pci/atomisp_cmd.c   |  7 --
 .../staging/media/atomisp/pci/atomisp_ioctl.c | 72 ++++++++++++++++++-
 2 files changed, 71 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
index 851046ecbdbf..0ddee36cdcd7 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
@@ -4918,13 +4918,6 @@ int atomisp_try_fmt(struct video_device *vdev, struct v4l2_pix_format *f,
 	}
 
 	f->pixelformat = fmt->pixelformat;
-	/*
-	 * FIXME: do we need to setup this differently, depending on the
-	 * sensor or the pipeline?
-	 */
-	f->colorspace = V4L2_COLORSPACE_REC709;
-	f->ycbcr_enc = V4L2_YCBCR_ENC_709;
-	f->xfer_func = V4L2_XFER_FUNC_709;
 
 	/*
 	 * If the format is jpeg or custom RAW, then the width and height will
diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
index 84ff97dabbed..1e6da6116a06 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
@@ -847,6 +847,72 @@ static int atomisp_g_fmt_file(struct file *file, void *fh,
 	return 0;
 }
 
+static int atomisp_adjust_fmt(struct v4l2_format *f)
+{
+	const struct atomisp_format_bridge *format_bridge;
+	u32 padded_width;
+
+	format_bridge = atomisp_get_format_bridge(f->fmt.pix.pixelformat);
+
+	padded_width = f->fmt.pix.width + pad_w;
+
+	if (format_bridge->planar) {
+		f->fmt.pix.bytesperline = padded_width;
+		f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height *
+						  DIV_ROUND_UP(format_bridge->depth *
+						  padded_width, 8));
+	} else {
+		f->fmt.pix.bytesperline = DIV_ROUND_UP(format_bridge->depth *
+						      padded_width, 8);
+		f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height * f->fmt.pix.bytesperline);
+	}
+
+	if (f->fmt.pix.field == V4L2_FIELD_ANY)
+		f->fmt.pix.field = V4L2_FIELD_NONE;
+
+	format_bridge = atomisp_get_format_bridge(f->fmt.pix.pixelformat);
+	if (!format_bridge)
+		return -EINVAL;
+
+	/* Currently, raw formats are broken!!! */
+	if (format_bridge->sh_fmt == IA_CSS_FRAME_FORMAT_RAW) {
+		f->fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
+
+		format_bridge = atomisp_get_format_bridge(f->fmt.pix.pixelformat);
+		if (!format_bridge)
+			return -EINVAL;
+	}
+
+	padded_width = f->fmt.pix.width + pad_w;
+
+	if (format_bridge->planar) {
+		f->fmt.pix.bytesperline = padded_width;
+		f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height *
+						  DIV_ROUND_UP(format_bridge->depth *
+						  padded_width, 8));
+	} else {
+		f->fmt.pix.bytesperline = DIV_ROUND_UP(format_bridge->depth *
+						      padded_width, 8);
+		f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height * f->fmt.pix.bytesperline);
+	}
+
+	if (f->fmt.pix.field == V4L2_FIELD_ANY)
+		f->fmt.pix.field = V4L2_FIELD_NONE;
+
+	/*
+	 * FIXME: do we need to setup this differently, depending on the
+	 * sensor or the pipeline?
+	 */
+	f->fmt.pix.colorspace = V4L2_COLORSPACE_REC709;
+	f->fmt.pix.ycbcr_enc = V4L2_YCBCR_ENC_709;
+	f->fmt.pix.xfer_func = V4L2_XFER_FUNC_709;
+
+	f->fmt.pix.width -= pad_w;
+	f->fmt.pix.height -= pad_h;
+
+	return 0;
+}
+
 /* This function looks up the closest available resolution. */
 static int atomisp_try_fmt_cap(struct file *file, void *fh,
 			       struct v4l2_format *f)
@@ -858,7 +924,11 @@ static int atomisp_try_fmt_cap(struct file *file, void *fh,
 	rt_mutex_lock(&isp->mutex);
 	ret = atomisp_try_fmt(vdev, &f->fmt.pix, NULL);
 	rt_mutex_unlock(&isp->mutex);
-	return ret;
+
+	if (ret)
+		return ret;
+
+	return atomisp_adjust_fmt(f);
 }
 
 static int atomisp_g_fmt_cap(struct file *file, void *fh,
-- 
2.31.1


^ permalink raw reply related

* Re: [PATCH 1/7] staging: vt6655: Introduce `idx` temporary variable
From: Dan Carpenter @ 2021-11-04 12:05 UTC (permalink / raw)
  To: Karolina Drobnik
  Cc: outreachy-kernel, gregkh, forest, linux-staging, linux-kernel
In-Reply-To: <34bd0e8f42597edf006a950d420345befc4e0bc2.1635415820.git.karolinadrobnik@gmail.com>

On Thu, Oct 28, 2021 at 11:35:31AM +0100, Karolina Drobnik wrote:
> Add a local variable to store `MISCFIFO_SYNDATA_IDX` offset.
> This change helps in shortening the lines in `rf.c` that
> are deemed too long by checkpatch.pl.
> 

No, this just makes the code harder to read.  Don't introduce a local
variable which only holds a global constant.  Variables should be
variable and constants should be constants.  No one wants to have to
look up things for no reason.

regards,
dan carpenter


^ permalink raw reply

* Re: [PATCH v4 1/5] media: imx: Remove unused functions
From: Dorota Czaplejewicz @ 2021-11-04 12:07 UTC (permalink / raw)
  To: Steve Longerbeam, Philipp Zabel, Mauro Carvalho Chehab,
	Greg Kroah-Hartman, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	linux-media, linux-staging, linux-arm-kernel, linux-kernel,
	kernel, phone-devel
In-Reply-To: <20211104113631.206899-1-dorota.czaplejewicz@puri.sm>

[-- Attachment #1: Type: text/plain, Size: 856 bytes --]

On Thu, 4 Nov 2021 12:41:53 +0100
Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> wrote:

> Neither imx_media_mbus_fmt_to_ipu_image nor imx_media_ipu_image_to_mbus_fmt
> were used anywhere.
> 
> Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
> ---
> 
> Hi,
> 
> Compared to v3, this patch series introduces the checks of imx_media_find_mbus_format return values in patch 4 and 5.
> 
> Cheers,
> Dorota
> 

I should mention that this part from v3 still applies:

> The use of `v4l2_fill_pixfmt` comes with the downside of breaking 10-bit Bayer formats, or at least until my other series gets accepted

The other series is:

Message-id: 20211019114718.827400-1-dorota.czaplejewicz@puri.sm

https://lore.kernel.org/linux-media/20211019114718.827400-1-dorota.czaplejewicz@puri.sm/

Regards,
Dorota Czaplejewicz

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply

* Re: [PATCH v2 1/8] staging: vt6655: Introduce `idx` temporary variable
From: Dan Carpenter @ 2021-11-04 12:09 UTC (permalink / raw)
  To: Karolina Drobnik
  Cc: outreachy-kernel, gregkh, forest, linux-staging, linux-kernel
In-Reply-To: <34bd0e8f42597edf006a950d420345befc4e0bc2.1635773680.git.karolinadrobnik@gmail.com>

On Mon, Nov 01, 2021 at 02:31:59PM +0000, Karolina Drobnik wrote:
> Add a local variable to store `MISCFIFO_SYNDATA_IDX` offset.
> This change helps in shortening the lines in `rf.c` that
> are deemed too long by checkpatch.pl.
> 

I started reviewing the v1 patch but I should have been reviewing this
patchset.  Please don't do this.  Leave the constant as a constant so
we don't have to look it up.

regards,
dan carpenter


^ permalink raw reply

* Re: [PATCH v2 2/8] staging: vt6655: Use incrementation in `idx`
From: Dan Carpenter @ 2021-11-04 12:15 UTC (permalink / raw)
  To: Karolina Drobnik
  Cc: outreachy-kernel, gregkh, forest, linux-staging, linux-kernel
In-Reply-To: <c569952d92ba51f32679c2fd87fd48ad8e49e3fc.1635773680.git.karolinadrobnik@gmail.com>

On Mon, Nov 01, 2021 at 02:32:00PM +0000, Karolina Drobnik wrote:
> Increment `idx` in a loop instead of adding the loop counter
> `i` to do so. Thanks to this change, the cast to unsigned short
> can be removed.
> 
> Signed-off-by: Karolina Drobnik <karolinadrobnik@gmail.com>
> ---
>  drivers/staging/vt6655/rf.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c
> index f195dafb6e63..c07653566d17 100644
> --- a/drivers/staging/vt6655/rf.c
> +++ b/drivers/staging/vt6655/rf.c
> @@ -700,11 +700,11 @@ bool RFvWriteWakeProgSyn(struct vnt_private *priv, unsigned char rf_type,
>  			return false;
>  
>  		for (i = 0; i < CB_AL2230_INIT_SEQ; i++)
> -			MACvSetMISCFifo(priv, (unsigned short)(idx + i), al2230_init_table[i]);
> +			MACvSetMISCFifo(priv, idx++, al2230_init_table[i]);

The cast was always pointless.  You can remove it without any other
changes.

regards,
dan carpenter


^ permalink raw reply

* Re: atomisp current issues
From: Mauro Carvalho Chehab @ 2021-11-04 12:46 UTC (permalink / raw)
  To: Linux Media Mailing List
  Cc: Tsuchiya Yuto, Hans de Goede, Patrik Gfeller, Sakari Ailus,
	Greg Kroah-Hartman, Hans Verkuil, Kaixu Xia, Laurent Pinchart,
	Yang Li, Tomi Valkeinen, Alex Dewar, Aline Santana Cordeiro,
	Arnd Bergmann, Alan, Peter Zijlstra, Ingo Molnar, linux-staging,
	Linux Kernel Mailing List, Andy Shevchenko
In-Reply-To: <20211103135418.496f75d5@sal.lan>

As an update on that:

Em Wed, 3 Nov 2021 13:54:18 +0000
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> escreveu:

> Hi,
> 
> From what I've seen so far, those are the main issues with regards to V4L2 API,
> in order to allow a generic V4L2 application to work with it.
> 
> MMAP support

This issue still needs to be addressed...

> From my side, I opted to add support for USERPTR on camorama:
> 
> 	https://github.com/alessio/camorama

...

> In time:
> --------
> 
>  Camorama currently doesn't work due to some other API bugs. See below.

But now camorama has gained support for autodetecting problems with
MMAP support.

At least for Asus T101HA, camorama is now working with atomisp.

> VIDIOC_G_FMT/VIDIOC_S_FMT/VIDIOC_TRY_FMT issues
> ===============================================

I addressed those issues. The implementation is not 100%, but it is good
enough for camorama to start working.

> 
> Video devices
> =============
> 
> Currently, 10 video? devices are created:

I didn't touch it. So, camorama should be called the first time with:

	camorama -d /dev/video2

in order for it to work. As camorama memorizes the last used camera,
it will pick /dev/video2 if called later without any parameters.

Regards,
Mauro

^ permalink raw reply

* Re: atomisp current issues
From: Laurent Pinchart @ 2021-11-04 12:47 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: Linux Media Mailing List, Tsuchiya Yuto, Hans de Goede,
	Patrik Gfeller, Mauro Carvalho Chehab, Sakari Ailus,
	Greg Kroah-Hartman, Hans Verkuil, Kaixu Xia, Yang Li,
	Tomi Valkeinen, Alex Dewar, Aline Santana Cordeiro, Arnd Bergmann,
	Alan, Peter Zijlstra, Ingo Molnar, linux-staging,
	Linux Kernel Mailing List, Andy Shevchenko
In-Reply-To: <20211104105051.4836fafb@sal.lan>

Hi Mauro,

On Thu, Nov 04, 2021 at 10:50:51AM +0000, Mauro Carvalho Chehab wrote:
> Em Thu, 4 Nov 2021 11:53:55 +0200 Laurent Pinchart escreveu:
> > On Wed, Nov 03, 2021 at 01:54:18PM +0000, Mauro Carvalho Chehab wrote:
> > > Hi,
> > > 
> > > From what I've seen so far, those are the main issues with regards to V4L2 API,
> > > in order to allow a generic V4L2 application to work with it.
> > > 
> > > MMAP support
> > > ============
> > > 
> > > Despite having some MMAP code on it, the current implementation is broken. 
> > > Fixing it is not trivial, as it would require fixing the HMM support on it, 
> > > which does several tricks.
> > > 
> > > The best would be to replace it by something simpler. If this is similar
> > > enough to IPU3, perhaps one idea would be to replace the HMM code on it by 
> > > videodev2 + IPU3 HMM code.
> > > 
> > > As this is not trivial, I'm postponing such task. If someone has enough
> > > time, it would be great to have this fixed.
> > > 
> > > From my side, I opted to add support for USERPTR on camorama:
> > > 
> > > 	https://github.com/alessio/camorama  
> > 
> > We should *really* phase out USERPTR support. 
> 
> I'm not a big fan of userptr, buy why do we phase it out?

Because USERPTR is broken by design. It gives a false promise to
userspace that a user pointer can be DMA'ed to, and this isn't generally
true. Even if buffer are carefully allocated to be compatible with the
device requirements, there are corner cases that prevent making a
mechanism based on get_user_pages() a first class citizen. In any case,
USERPTR makes life more difficult for the kernel.

There may be some use cases for which USERPTR could be an appropriate
solution, but now that we have DMABUF (and of course MMAP), I see no
reason to continue supporting USERPTR forever, and certainly not adding
new users.

> > Worst case you may support
> > DMABUF only if MMAP is problematic, but I don't really see why it could
> > be easy to map an imported buffer and difficult to map a buffer
> > allocated by the driver. videobuf2 should be used.
> 
> Yeah, atomisp should be migrated to VB2, and such migration is listed at
> its TODO file. However, this is a complex task, as its memory management
> code is very complex.

Have a look at GPU memory management, and you'll find the atomisp driver
very simple in comparison :-)

I'm also pretty sure that drivers/staging/media/atomisp/pci/hmm/ could
be rewritten to use more of the existing kernel frameworks.

> Maybe we could try to use the ISP3 code on it,
> replacing the current HMM logic, but not sure if the implementation there 
> would be compatible.

I'd be surprised if the IPU3 was compatible.

> In any case, the current priority is to make the driver to work, fixing 
> the V4L2 API implementation, which has several issues.
> 
> ...
> 
> > > Video devices
> > > =============
> > > 
> > > Currently, 10 video? devices are created:
> > > 
> > > 	$ for i in $(ls /dev/video*|sort -k2 -to -n); do echo -n $i:; v4l2-ctl -D -d $i|grep Name; done
> > > 	/dev/video0:	Name             : ATOMISP ISP CAPTURE output
> > > 	/dev/video1:	Name             : ATOMISP ISP VIEWFINDER output
> > > 	/dev/video2:	Name             : ATOMISP ISP PREVIEW output
> > > 	/dev/video3:	Name             : ATOMISP ISP VIDEO output
> > > 	/dev/video4:	Name             : ATOMISP ISP ACC
> > > 	/dev/video5:	Name             : ATOMISP ISP MEMORY input
> > > 	/dev/video6:	Name             : ATOMISP ISP CAPTURE output
> > > 	/dev/video7:	Name             : ATOMISP ISP VIEWFINDER output
> > > 	/dev/video8:	Name             : ATOMISP ISP PREVIEW output
> > > 	/dev/video9:	Name             : ATOMISP ISP VIDEO output
> > > 	/dev/video10:	Name             : ATOMISP ISP ACC
> > > 
> > > That seems to be written to satisfy some Android-based app, but we don't
> > > really need all of those.
> > > 
> > > I'm thinking to comment out the part of the code which creates all of those,
> > > keeping just "ATOMISP ISP PREVIEW output", as I don't think we need all
> > > of those.  
> > 
> > Why is that ? Being able to capture multiple streams in different
> > resolutions is important for lots of applications, the viewfinder
> > resolution is often different than the video streaming and/or still
> > capture resolution. Scaling after capture is often expensive (and there
> > are memory bandwidth and power constraints to take into account too). A
> > single-stream device may be better than nothing, but it's time to move
> > to the 21st century.
> 
> True, but having multiple videonodes at this moment is not helping,
> specially since only one of such modes (PREVIEW) is actually working at
> the moment.
> 
> So, this is more a strategy to help focusing on making this work
> properly, and not a statement that those modules would be dropped.
> 
> I'd say that the "final" version of atomisp - once it gets 
> fixed, cleaned up and started being MC-controlled - should support
> all such features, and have the pipelines setup via libcamera.

I have no issue with phasing development (I have few issues with the
atomisp driver in general actually, as it's in staging), but the goal
should be kept in mind to make sure development goes in the right
direction.

-- 
Regards,

Laurent Pinchart

^ permalink raw reply

* Re: [PATCH v2 2/8] staging: vt6655: Use incrementation in `idx`
From: Dan Carpenter @ 2021-11-04 13:00 UTC (permalink / raw)
  To: Karolina Drobnik
  Cc: outreachy-kernel, gregkh, forest, linux-staging, linux-kernel
In-Reply-To: <c569952d92ba51f32679c2fd87fd48ad8e49e3fc.1635773680.git.karolinadrobnik@gmail.com>

On Mon, Nov 01, 2021 at 02:32:00PM +0000, Karolina Drobnik wrote:
> Increment `idx` in a loop instead of adding the loop counter
> `i` to do so. Thanks to this change, the cast to unsigned short
> can be removed.
> 
> Signed-off-by: Karolina Drobnik <karolinadrobnik@gmail.com>
> ---
>  drivers/staging/vt6655/rf.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c
> index f195dafb6e63..c07653566d17 100644
> --- a/drivers/staging/vt6655/rf.c
> +++ b/drivers/staging/vt6655/rf.c
> @@ -700,11 +700,11 @@ bool RFvWriteWakeProgSyn(struct vnt_private *priv, unsigned char rf_type,
>  			return false;
>  
>  		for (i = 0; i < CB_AL2230_INIT_SEQ; i++)
> -			MACvSetMISCFifo(priv, (unsigned short)(idx + i), al2230_init_table[i]);
> +			MACvSetMISCFifo(priv, idx++, al2230_init_table[i]);

Of course, idx is no longer a constant so declaring it as a variable
makes sense here.  But maybe just do it in the same patch because the
patch 1/1 doesn't make sense as a stand alone patch.

Also don't declare idx as an unsigned short.  It's better to declare it
as a int so it just works like a normal number and you don't have to
think about signedness bugs and wrapping and edge cases.

regards,
dan carpenter


^ permalink raw reply

* [GIT PULL] Staging driver changes for 5.16-rc1
From: Greg KH @ 2021-11-04 13:06 UTC (permalink / raw)
  To: Linus Torvalds, Andrew Morton, Stephen Rothwell
  Cc: linux-kernel, linux-staging

The following changes since commit 519d81956ee277b4419c723adfb154603c2565ba:

  Linux 5.15-rc6 (2021-10-17 20:00:13 -1000)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git tags/staging-5.16-rc1

for you to fetch changes up to 10508ae08ed8ce8794785194ad7309f1437d43fd:

  staging: r8188eu: hal: remove goto statement and local variable (2021-10-30 11:15:55 +0200)

----------------------------------------------------------------
Staging driver update for 5.16-rc1

Here is the big set of staging driver updates and cleanups for 5.16-rc1.

Overall we ended up removing a lot of code this time, a bit over 20,000
lines are now gone thanks to a lot of cleanup work by many developers.

Nothing huge in here functionality wise, just loads of cleanups:
	- r8188eu driver major cleanups and removal of unused and dead
	  code
	- wlan-ng minor cleanups
	- fbtft driver cleanups
	- most driver cleanups
	- rtl8* drivers cleanups
	- rts5208 driver cleanups
	- vt6655 driver cleanups
	- vc04_services drivers cleanups
	- wfx cleanups on the way to almost getting this merged out of
	  staging (it's close!)
	- tiny mips changes needed for the mt7621 drivers, they have
	  been acked by the respective subsystem maintainers to go
	  through this tree.

All of these have been in linux-next for a while with no reported
issues.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

----------------------------------------------------------------
Ajith P V (1):
      staging: fieldbus: anybus: reframe comment to avoid warning

Aldas Taraškevičius (1):
      staging: wlan-ng: Remove filenames from files

Benjamin Philip (9):
      staging: rts5208: remove unnecessary parentheses in ms.c
      staging: rts5208: remove unnecessary parentheses in rtsx_card.c
      staging: rts5208: remove unnecessary parentheses in rtsx.c
      staging: rts5208: remove unnecessary parentheses in rtsx_chip.c
      staging: rts5208: remove unnecessary parentheses in rtsx_transport.c
      staging: rts5208: remove unnecessary parentheses in sd.c
      staging: rts5208: remove unnecessary parentheses in xd.c
      staging: rts5208: remove unnecessary parentheses in rtsx_scsi.c
      staging: rts5208: remove parentheses pair in sd.c

Bryan Brattlof (1):
      staging: rtl8723bs: ignore unused wiphy_wowlan object warnings

Changcheng Deng (1):
      staging: r8188eu: use swap()

Colin Ian King (1):
      staging: r8188eu: remove redundant variable hoffset

Dawid Esterhuizen (1):
      staging: rtl8712: Statements should start on a tabstop

Fabio Aiuto (5):
      staging: rtl8723bs: unwrap initialization of queues
      staging: rtl8723bs: remove unnecessary parentheses
      staging: rtl8723bs: remove unused _rtw_init_queue() function
      staging: rtl8723bs: remove possible deadlock when disconnect
      staging: rtl8723bs: remove possible deadlock when disconnect (v2)

Fabio M. De Francesco (23):
      staging: r8188eu: Remove _enter/_exit_critical_mutex()
      staging: r8188eu: remove unnedeed parentheses in usbctrl_vendorreq()
      staging: r8188eu: remove unnecessary space in usbctrl_vendorreq()
      staging: r8188eu: clean up symbols in usbctrl_vendorreq()
      staging: r8188eu: reorder declarations in usbctrl_vendorreq()
      staging: r8188eu: remove test in usbctrl_vendorreq()
      staging: r8188eu: reorder comments in usbctrl_vendorreq()
      staging: r8188eu: remove a comment from usbctrl_vendorreq()
      staging: r8188eu: rename symbols in rtw_read*() and rtw_write*()
      staging: r8188eu: remove casts from rtw_{read,write}*()
      staging: r8188eu: change the type of a variable in rtw_write16()
      staging: r8188eu: remove a buffer from rtw_writeN()
      staging: r8188eu: remove a bitwise AND from rtw_writeN()
      staging: r8188eu: change the type of a variable in rtw_read16()
      staging: r8188eu: Remove a test from usbctrl_vendorreq()
      staging: r8188eu: call new usb_read() from rtw_read{8,16,32}()
      staging: r8188eu: call new usb_write() from rtw_write{8,16,32,N}()
      staging: r8188eu: Use completions for signaling start / end kthread
      staging: r8188eu: Use completions for signaling enqueueing
      staging: r8188eu: Remove redundant 'if' statement
      staging: r8188eu: Remove initialized but unused semaphore
      staging: r8188eu: Remove unused semaphore "io_retevt"
      staging: r8188eu: Use a Mutex instead of a binary Semaphore

Gaston Gonzalez (21):
      staging: vchiq_dev: remove braces from if block
      staging: vchiq_dev: cleanup code alignment issues
      staging: vchiq: remove braces from if block
      staging: vchiq: add braces to if block
      staging: vchiq: cleanup code alignment issues
      staging: vchiq_arm: cleanup code alignment issues
      staging: vchiq_arm: remove unnecessary space in cast
      staging: vchiq_arm: clarify multiplication expressions
      staging: vchiq_arm: cleanup blank lines
      staging: vchiq_arm: fix quoted strings split across lines
      staging: vchiq_arm: remove extra blank line
      staging: vchiq_arm: use __func__ to get function name in debug message
      staging: vchiq_core: cleanup blank lines
      staging: vchiq_core: cleanup code alignment issues
      staging: vchiq_core.h: fix CamelCase in function declaration
      staging: vchiq_core.h: use preferred kernel types
      staging: vchiq: drop trailing semicolon in macro definition
      staging: vchiq_core: drop extern prefix in function declarations
      staging: vchiq_core: cleanup lines that end with '(' or '['
      staging: vchiq_core: fix quoted strings split across lines
      staging: vchiq_core: get rid of typedef

Greg Kroah-Hartman (5):
      staging: vchiq: convert to use a miscdevice
      staging: axis-fifo: convert to use miscdevice
      Revert "staging: rtl8723bs: remove possible deadlock when disconnect"
      Merge branch 5.15-rc3 into staging-next
      Merge 5.15-rc6 into staging-next

Gustavo A. R. Silva (3):
      staging: rtl8723bs: Replace zero-length array with flexible-array member
      staging: r8188eu: Replace zero-length array with flexible-array member
      staging: r8188eu: Use zeroing allocator in wpa_set_encryption()

Hans de Goede (2):
      staging: rtl8723bs: remove a second possible deadlock
      staging: rtl8723bs: remove a third possible deadlock

Jakub Kicinski (8):
      staging: use eth_hw_addr_set()
      staging: use eth_hw_addr_set() instead of ether_addr_copy()
      staging: use eth_hw_addr_set() for dev->addr_len cases
      staging: qlge: use eth_hw_addr_set()
      staging: rtl8712: prepare for const netdev->dev_addr
      staging: unisys: use eth_hw_addr_set()
      staging: rtl: use eth_hw_addr_set()
      staging: use eth_hw_addr_set() in orphan drivers

Johan Hovold (2):
      staging: rtl8192u: fix control-message timeouts
      staging: r8712u: fix control-message timeout

Julian Braha (1):
      staging: rtl8723bs: fix unmet dependency on CRYPTO for CRYPTO_LIB_ARC4

Jérôme Pouiller (32):
      staging: wfx: use abbreviated message for "incorrect sequence"
      staging: wfx: do not send CAB while scanning
      staging: wfx: ignore PS when STA/AP share same channel
      staging: wfx: wait for SCAN_CMPL after a SCAN_STOP
      staging: wfx: avoid possible lock-up during scan
      staging: wfx: drop unused argument from hif_scan()
      staging: wfx: fix atomic accesses in wfx_tx_queue_empty()
      staging: wfx: take advantage of wfx_tx_queue_empty()
      staging: wfx: declare support for TDLS
      staging: wfx: fix support for CSA
      staging: wfx: relax the PDS existence constraint
      staging: wfx: simplify API coherency check
      staging: wfx: update with the firmware API 3.8
      staging: wfx: uniformize counter names
      staging: wfx: fix misleading 'rate_id' usage
      staging: wfx: declare variables at beginning of functions
      staging: wfx: simplify hif_join()
      staging: wfx: reorder function for slightly better eye candy
      staging: wfx: fix error names
      staging: wfx: apply naming rules in hif_tx_mib.c
      staging: wfx: remove unused definition
      staging: wfx: remove useless debug statement
      staging: wfx: fix space after cast operator
      staging: wfx: remove references to WFxxx in comments
      staging: wfx: update files descriptions
      staging: wfx: reformat comment
      staging: wfx: avoid c99 comments
      staging: wfx: fix comments styles
      staging: wfx: remove useless comments after #endif
      staging: wfx: explain the purpose of wfx_send_pds()
      staging: wfx: indent functions arguments
      staging: wfx: ensure IRQ is ready before enabling it

Kai Song (1):
      staging: r8188eu: Use kmemdup() to replace kmalloc + memcpy

Karolina Drobnik (17):
      staging: vt6655: Rename byPreambleType field
      staging: vt6655: Rename `by_preamble_type` parameter
      staging: vt6655: Rename `dwAL2230InitTable` array
      staging: vt6655: Use named constants when checking preamble type
      staging: vt6655: Rename `ii` variable
      staging: vt6655: Rename `byInitCount` variable
      staging: vt6655: Rename `bySleepCount` variable
      staging: vt6655: Rename `uChannel` variable
      staging: vt6655: Rename `byRFType` variable
      staging: vt6655: Rename `dwAL2230ChannelTable0` array
      staging: vt6655: Rename `dwAL2230ChannelTable1` array
      staging: vt6655: Rename `dwAL7230ChannelTable0` array
      staging: vt6655: Rename `dwAL7230ChannelTable1` array
      staging: vt6655: Rename `dwAL7230ChannelTable2` array
      staging: vt6655: Rename `dwAL7230InitTableAMode` array
      staging: vt6655: Rename `dwAL2230PowerTable` array
      staging: vt6655: Rename `dwAL7230InitTable` array

Krish Jain (1):
      staging/mt7621-dma: Format lines in "hsdma-mt7621.c" ending with an open parenthesis

Krzysztof Kozlowski (1):
      staging; wlan-ng: remove duplicate USB device ID

Kushal Kothari (5):
      staging: rtl8723bs: core: Remove true and false comparison
      staging: rtl8723bs: core: Remove true and false comparison
      staging: rtl8723bs: core: Remove unnecessary parentheses
      staging: rtl8723bs: core: Remove unnecessary space after a cast
      staging: rtl8723bs: core: Remove unnecessary blank lines

Larry Finger (3):
      staging: r8188eu: Remove conditionals CONFIG_88EU_{AP_MODE,P2P}
      staging: r8188eu: Remove mp, a.k.a. manufacturing process, code
      staging: r8188eu: Remove unused macros and defines from odm.h

Longji Guo (1):
      staging: rtl8723bs: remove meaningless pstat->passoc_req check in OnAssocReq()

Martin Kaiser (85):
      staging: r8188eu: remove unused function prototype
      staging: r8188eu: remove unused define
      staging: r8188eu: this endless loop is executed only once
      staging: r8188eu: remove write-only variable bLCKInProgress
      staging: r8188eu: remove unused function usb_endpoint_is_int
      staging: r8188eu: remove unused function RT_usb_endpoint_is_bulk_in
      staging: r8188eu: remove unused function RT_usb_endpoint_num
      staging: r8188eu: remove the remaining usb endpoint functions
      staging: r8188eu: btcoex_rfon is always false
      staging: r8188eu: setting HW_VAR_SET_RPWM does nothing
      staging: r8188eu: remove write-only variable cpwm
      staging: r8188eu: remove write-only variable tog
      staging: r8188eu: bHWPwrPindetect is always false
      staging: r8188eu: remove rtw_hw_suspend
      staging: r8188eu: remove rtw_set_rpwm
      staging: r8188eu: remove unused power state defines
      staging: r8188eu: _free_pwrlock is empty
      staging: r8188eu: remove unused pwrctrl definitions
      staging: r8188eu: remove unused enum and array
      staging: r8188eu: rtw_set_ips_deny is not used
      staging: r8188eu: remove unused variable cpwm_tog
      staging: r8188eu: remove unused variable b_hw_radio_off
      staging: r8188eu: brfoffbyhw is always false
      staging: r8188eu: remove rtw_hw_resume
      staging: r8188eu: remove rtw_free_pwrctrl_priv prototype
      staging: r8188eu: remove the HW_VAR_CHECK_TXBUF "hal variable"
      staging: r8188eu: do not write past the end of an array
      staging: r8188eu: remove an obsolete comment
      staging: r8188eu: remove unused led component
      staging: r8188eu: remove write-only HwRxPageSize
      staging: r8188eu: remove unused IntrMask
      staging: r8188eu: remove two write-only hal components
      staging: r8188eu: HardwareType is write-only
      staging: r8188eu: chip_type is write-only
      staging: r8188eu: interface type is always usb
      staging: r8188eu: support interface is always usb
      staging: r8188eu: hal data's customer id is always 0
      staging: r8188eu: Odm PatchID is always 0
      staging: r8188eu: merge two signal scale mapping functions
      staging: r8188eu: remove an unused define
      staging: r8188eu: remove specific device table
      staging: r8188eu: RfOnOffDetect is unused
      staging: r8188eu: remove odm fab version info
      staging: r8188eu: remove odm cut version info
      staging: r8188eu: remove odm dualmac smart concurrent info
      staging: r8188eu: remove odm wifi test info
      staging: r8188eu: remove odm hct test info
      staging: r8188eu: remove odm ext trsw info
      staging: r8188eu: remove odm ext pa info
      staging: r8188eu: remove odm ext lna info
      staging: r8188eu: remove dm_CheckStatistics
      staging: r8188eu: simplify rtl8188e_HalDmWatchDog
      staging: r8188eu: remove rtl8188e_deinit_dm_priv
      staging: r8188eu: remove LastMinUndecoratedPWDBForDM
      staging: r8188eu: SupportICType is always ODM_RTL8188E
      staging: r8188eu: remove odm_SwAntDivInit
      staging: r8188eu: odm BoardType is never set
      staging: r8188eu: odm SupportPlatform is always ODM_CE
      staging: r8188eu: remove empty trigger gpio code
      staging: r8188eu: interface type is always usb
      staging: r8188eu: remove two checks that are always false
      staging: r8188eu: remove unused function prototypes
      staging: r8188eu: PHY_SetRFPathSwitch_8188E is not used
      staging: r8188eu: clean up Hal8188EPhyCfg.h
      staging: r8188eu: remove procfs functions
      staging: r8188eu: CurrentWirelessMode is not used
      staging: r8188eu: remove unused components in pwrctrl_priv
      staging: r8188eu: remove BT_COEXIST settings from Makefile
      staging: r8188eu: res_to_status is unused
      staging: r8188eu: daemonize is not defined
      staging: r8188eu: don't accept SIGTERM for cmd thread
      staging: r8188eu: Makefile: remove unused driver config
      staging: r8188eu: Makefile: don't overwrite global settings
      staging: r8188eu: Makefile: use one file list
      staging: r8188eu: fix memleak in rtw_wx_set_enc_ext
      staging: r8188eu: remove unused dm_priv components
      staging: r8188eu: odm_rate_adapt Type is constant
      staging: r8188eu: use helper to check for broadcast address
      staging: r8188eu: use helper to set broadcast address
      staging: r8188eu: remove unused defines and enums
      staging: r8188eu: silent_reset_inprogress is never read
      staging: r8188eu: wifi_error_status is write-only
      staging: r8188eu: silentreset_mutex is unused
      staging: r8188eu: remove last_tx_complete_time
      staging: r8188eu: remove the sreset_priv structure

Michael Straube (285):
      staging: rtl8723bs: clean up comparsions to NULL
      staging: r8188eu: remove rtl8188e_PHY_ConfigRFWithHeaderFile()
      staging: r8188eu: remove rtl8188e_PHY_ConfigRFWithParaFile()
      staging: r8188eu: remove rtw_get_oper_bw()
      staging: r8188eu: remove rtw_get_oper_choffset()
      staging: r8188eu: remove get_bsstype()
      staging: r8188eu: remove CAM_empty_entry()
      staging: r8188eu: remove is_ap_in_wep()
      staging: r8188eu: remove should_forbid_n_rate()
      staging: r8188eu: convert type of second parameter of rtw_*_encrypt()
      staging: r8188eu: convert type of second parameter of rtw_*_decrypt()
      staging: r8188eu: remove unnecessary type casts
      staging: r8188eu: remove local variable Indexforchannel
      staging: r8188eu: refactor field of struct odm_rf_cal
      staging: r8188eu: remove unused constants from wifi.h
      staging: r8188eu: remove commented constants from wifi.h
      staging: r8188eu: remove Hal_MPT_CCKTxPowerAdjustbyIndex()
      staging: r8188eu: remove set but unused variable
      staging: r8188eu: remove ICType from struct HAL_VERSION
      staging: r8188eu: remove unused function SetBcnCtrlReg()
      staging: r8188eu: use mac_pton() in rtw_macaddr_cfg()
      staging: r8188eu: ensure mac address buffer is properly aligned
      staging: r8188eu: use ETH_ALEN
      staging: r8188eu: use is_*_ether_addr() in rtw_macaddr_cfg()
      staging: r8188eu: use random default mac address
      staging: r8188eu: use ether_addr_copy() in rtw_macaddr_cfg()
      staging: r8188eu: add missing blank line after declarations
      staging: r8188eu: remove unnecessary parentheses
      staging: r8188eu: remove header file rtw_ioctl_rtl.h
      staging: r8188eu: remove unused defines from mp_custom_oid.h
      staging: r8188eu: remove unused enum from ieee80211.h.
      staging: r8188eu: remove unused enum rt_eeprom_type
      staging: r8188eu: remove IS_HARDWARE_TYPE_8188* macros
      staging: r8188eu: remove enum hardware_type
      staging: r8188eu: remove unused constant CRC32_POLY
      staging: r8188eu: use in-kernel arc4 encryption
      staging: r8188eu: remove rtw_use_tkipkey_handler()
      staging: r8188eu: remove intf_chip_configure from hal_ops
      staging: r8188eu: remove read_adapter_info from hal_ops
      staging: r8188eu: remove read_chip_version from hal_ops
      staging: r8188eu: remove wrapper around ReadChipVersion8188E()
      staging: r8188eu: remove GetHalODMVarHandler from hal_ops
      staging: r8188eu: remove init_default_value from hal_ops
      staging: r8188eu: remove InitSwLeds from hal_ops
      staging: r8188eu: remove DeInitSwLeds from hal_ops
      staging: r8188eu: remove dm_init from hal_ops
      staging: r8188eu: remove dm_deinit from hal_ops
      staging: r8188eu: remove SetHalODMVarHandler from hal_ops
      staging: r8188eu: remove empty functions
      staging: r8188eu: remove unused function rtw_interface_ps_func()
      staging: r8188eu: remove interface_ps_func from hal_ops
      staging: r8188eu: remove hal_dm_watchdog from hal_ops
      staging: r8188eu: remove set_bwmode_handler from hal_ops
      staging: r8188eu: remove set_channel_handler from hal_ops
      staging: r8188eu: remove unused enum hal_intf_ps_func
      staging: r8188eu: remove Add_RateATid from hal_ops
      staging: r8188eu: remove hal_power_on from hal_ops
      staging: r8188eu: remove sreset_init_value from hal_ops
      staging: r8188eu: remove sreset_reset_value from hal_ops
      staging: r8188eu: remove silentreset from hal_ops
      staging: r8188eu: remove sreset_xmit_status_check from hal_ops
      staging: r8188eu: remove sreset_linked_status_check from hal_ops
      staging: r8188eu: remove sreset_get_wifi_status from hal_ops
      staging: r8188eu: remove EfusePowerSwitch from hal_ops
      staging: r8188eu: rename hal_EfusePowerSwitch_RTL8188E()
      staging: r8188eu: remove wrapper Efuse_PowerSwitch()
      staging: r8188eu: remove ReadEFuse from hal_ops
      staging: r8188eu: remove EFUSEGetEfuseDefinition from hal_ops
      staging: r8188eu: remove EfuseGetCurrentSize from hal_ops
      staging: r8188eu: remove empty comments
      staging: r8188eu: remove Efuse_PgPacketRead from hal_ops
      staging: r8188eu: remove Efuse_PgPacketWrite from hal_ops
      staging: r8188eu: remove Efuse_WordEnableDataWrite from hal_ops
      staging: r8188eu: remove useless assignment
      staging: r8188eu: remove AntDivBeforeLinkHandler from hal_ops
      staging: r8188eu: remove AntDivCompareHandler from hal_ops
      staging: r8188eu: remove empty function rtl8188e_start_thread()
      staging: r8188eu: remove empty function rtl8188e_stop_thread()
      staging: r8188eu: remove hal_notch_filter from hal_ops
      staging: r8188eu: remove free_hal_data from hal_ops
      staging: r8188eu: remove unused function rtl8188e_clone_haldata()
      staging: r8188eu: remove SetBeaconRelatedRegistersHandler from hal_ops
      staging: r8188eu: remove UpdateHalRAMask8188EUsb from hal_ops
      staging: r8188eu: remove unused function Hal_ProSetCrystalCap()
      staging: r8188eu: remove unused PHY_GetTxPowerLevel8188E()
      staging: r8188eu: remove unused PHY_ScanOperationBackup8188E()
      staging: r8188eu: remove unused PHY_UpdateTxPowerDbm8188E()
      staging: r8188eu: remove unused rtl8192c_PHY_GetHWRegOriginalValue()
      staging: r8188eu: remove unused odm_Init_RSSIForDM()
      staging: r8188eu: remove unused ODM_MacStatusQuery()
      staging: r8188eu: remove unused macro READ_AND_CONFIG_TC
      staging: r8188eu: remove unused macro ROUND
      staging: rtl8723bs: remove unused macros from ioctl_linux.c
      staging: r8188eu: remove IOL_exec_cmds_sync() from struct hal_ops
      staging: r8188eu: remove wrapper rtw_IOL_exec_cmds_sync()
      staging: r8188eu: remove rtw_IOL_append_LLT_cmd()
      staging: r8188eu: remove empty ODM_ReleaseTimer()
      staging: r8188eu: remove unused ODM_AcquireSpinLock()
      staging: r8188eu: remove unused ODM_ReleaseSpinLock()
      staging: r8188eu: remove unused ODM_FillH2CCmd()
      staging: r8188eu: remove unused ODM_sleep_us()
      staging: r8188eu: remove unused ODM_InitializeWorkItem()
      staging: r8188eu: remove unused ODM_StartWorkItem()
      staging: r8188eu: remove unused ODM_StopWorkItem()
      staging: r8188eu: remove unused ODM_FreeWorkItem()
      staging: r8188eu: remove unused ODM_ScheduleWorkItem()
      staging: r8188eu: remove unused ODM_IsWorkItemScheduled()
      staging: r8188eu: remove unused ODM_SetTimer()
      staging: r8188eu: remove unused ODM_Read2Byte()
      staging: r8188eu: remove unused ODM_FreeMemory()
      staging: r8188eu: remove unused ODM_AllocateMemory()
      staging: r8188eu: remove unused prototype ODM_InitializeTimer()
      staging: r8188eu: remove unused ODM_CancelAllTimers()
      staging: r8188eu: remove unused ODM_InitAllTimers()
      staging: r8188eu: remove mgnt_xmit from struct hal_ops
      staging: r8188eu: remove hal_xmit from struct hal_ops
      staging: r8188eu: remove read_bbreg from struct hal_ops
      staging: r8188eu: remove write_bbreg from struct hal_ops
      staging: r8188eu: remove read_rfreg from struct hal_ops
      staging: r8188eu: remove write_rfreg from struct hal_ops
      staging: r8188eu: remove rtl8188e_set_hal_ops()
      staging: r8188eu: remove header file HalHWImg8188E_FW.h
      staging: r8188eu: remove macro GET_EEPROM_EFUSE_PRIV
      staging: r8188eu: remove unused register definitions from odm_reg.h
      staging: r8188eu: remove header file odm_reg.h
      staging: r8188eu: remove unused enum RT_SPINLOCK_TYPE
      staging: r8188eu: remove unused defines from odm_types.h
      staging: r8188eu: remove unnecessary include from odm_types.h
      staging: r8188eu: remove unused enum odm_bt_coexist
      staging: r8188eu: remove unused ODM_RASupport_Init()
      staging: r8188eu: remove RaSupport88E from struct odm_dm_struct
      staging: r8188eu: remove dead code from odm_RxPhyStatus92CSeries_Parsing()
      staging: r8188eu: remove unused macros from rtl8188e_hal.h
      staging: r8188eu: remove write-only fields from struct hal_data_8188e
      staging: r8188eu: remove unused enums from rtl8188e_hal.h
      staging: r8188eu: remove unused field from struct hal_data_8188e
      staging: r8188eu: remove IS_1T1R, IS_1T2R, IS_2T2R macros
      staging: r8188eu: remove if test that is always true
      staging: r8188eu: remove NumTotalRFPath from struct hal_data_8188e
      staging: r8188eu: remove switches from phy_RF6052_Config_ParaFile()
      staging: r8188eu: remove ap_sta_info_defer_update()
      staging: r8188eu: remove rtw_acl_add_sta()
      staging: r8188eu: remove rtw_acl_remove_sta()
      staging: r8188eu: remove rtw_ap_inform_ch_switch()
      staging: r8188eu: remove rtw_check_beacon_data()
      staging: r8188eu: remove rtw_set_macaddr_acl()
      staging: r8188eu: remove odm_ConfigRF_RadioB_8188E()
      staging: r8188eu: remove ODM_DIG_LowerBound_88E()
      staging: r8188eu: remove rtl8188e_RF_ChangeTxPath()
      staging: r8188eu: remove unused struct rf_shadow
      staging: r8188eu: remove HalDetectPwrDownMode88E()
      staging: r8188eu: remove rtw_IOL_cmd_tx_pkt_buf_dump()
      staging: r8188eu: remove rtl8188e_set_rssi_cmd()
      staging: r8188eu: remove EFUSE_Read1Byte()
      staging: r8188eu: remove comments from odm_interface.h
      staging: r8188eu: remove unused macros from odm_interface.h
      staging: r8188eu: remove _ic_type from macro _cat in odm_interface.h
      staging: r8188eu: remove dead code from ODM_Write_DIG()
      staging: r8188eu: remove unnecessary if statement
      staging: r8188eu: remove more dead code from ODM_Write_DIG()
      staging: r8188eu: remove macro ODM_REG
      staging: r8188eu: remove macro ODM_BIT
      staging: r8188eu: remove unnecessary if statements
      staging: r8188eu: remove dead code from odm.c
      staging: r8188eu: remove macros ODM_IC_11{N,AC}_SERIES
      staging: r8188eu: remove header file odm_RegDefine11AC.h
      staging: r8188eu: remove unused defines from odm_RegDefine11N.h
      staging: r8188eu: clean up indentation in odm_RegDefine11N.h
      staging: r8188eu: remove ODM_SingleDualAntennaDetection()
      staging: r8188eu: remove EFUSE_ShadowRead()
      staging: r8188eu: remove efuse_GetCurrentSize()
      staging: r8188eu: remove efuse_GetMaxSize()
      staging: r8188eu: remove rtw_BT_efuse_map_write()
      staging: r8188eu: remove rtw_efuse_access()
      staging: r8188eu: remove rtw_efuse_map_write()
      staging: r8188eu: remove rtw_BT_efuse_map_read()
      staging: r8188eu: remove rtw_efuse_map_read()
      staging: r8188eu: remove _rtw_dequeue_network()
      staging: r8188eu: remove _rtw_enqueue_network()
      staging: r8188eu: remove rtw_get_timestampe_from_ie()
      staging: r8188eu: remove rtw_scan_abort()
      staging: r8188eu: remove issue_action_spct_ch_switch()
      staging: r8188eu: remove issue_probereq_p2p_ex()
      staging: r8188eu: remove sreset_get_wifi_status()
      staging: r8188eu: remove build_deauth_p2p_ie()
      staging: r8188eu: remove rtw_freq2ch()
      staging: r8188eu: remove rtw_set_802_11_add_key()
      staging: r8188eu: remove rtw_set_802_11_remove_key()
      staging: r8188eu: remove rtw_set_802_11_remove_wep()
      staging: r8188eu: remove rtw_set_country()
      staging: r8188eu: remove rtw_set_scan_mode()
      staging: r8188eu: remove rtw_validate_ssid()
      staging: r8188eu: remove rtw_set_channel_plan()
      staging: r8188eu: remove rtw_atoi()
      staging: r8188eu: remove rtw_cbuf_push()
      staging: r8188eu: remove rtw_cbuf_full()
      staging: r8188eu: remove rtw_os_read_port()
      staging: r8188eu: remove rtw_IOL_cmd_buf_dump()
      staging: r8188eu: remove action_public_str()
      staging: r8188eu: remove dump_ies()
      staging: r8188eu: remove hal_ch_offset_to_secondary_ch_offset()
      staging: r8188eu: remove secondary_ch_offset_to_hal_ch_offset()
      staging: r8188eu: remove ieee80211_get_hdrlen()
      staging: r8188eu: remove ieee80211_is_empty_essid()
      staging: r8188eu: remove rtw_action_frame_parse()
      staging: r8188eu: remove rtw_ies_remove_ie()
      staging: r8188eu: remove rtw_set_ie_ch_switch()
      staging: r8188eu: remove rtw_set_ie_mesh_ch_switch_parm()
      staging: r8188eu: remove rtw_set_ie_secondary_ch_offset()
      staging: r8188eu: remove enum secondary_ch_offset
      staging: r8188eu: remove rtw_dequeue_recvbuf()
      staging: r8188eu: remove rtw_enqueue_recvbuf()
      staging: r8188eu: remove rtw_enqueue_recvbuf_to_head()
      staging: r8188eu: remove rtw_init_recvframe()
      staging: r8188eu: remove rtw_calculate_wlan_pkt_size_by_attribue()
      staging: r8188eu: remove rtw_sctx_done()
      staging: r8188eu: remove odm_DynamicTxPowerNIC()
      staging: r8188eu: remove odm_DynamicTxPowerAP()
      staging: r8188eu: remove odm_DynamicTxPower()
      staging: r8188eu: remove write-only fields from struct dm_priv
      staging: r8188eu: remove PowerIndex_backup from struct dm_priv
      staging: r8188eu: remove dead code from rtl8188e_rf6052.c
      staging: r8188eu: remove DynamicTxHighPowerLvl from struct dm_priv
      staging: r8188eu: remove odm_DynamicTxPowerInit()
      staging: r8188eu: remove rtw_proc_{init,remove}_one()
      staging: r8188eu: remove rtw_cmd_clr_isr()
      staging: r8188eu: remove rtw_createbss_cmd_ex()
      staging: r8188eu: remove rtw_getbbreg_cmd()
      staging: r8188eu: remove rtw_getrfreg_cmd()
      staging: r8188eu: remove rtw_getrttbl_cmd()
      staging: r8188eu: remove rtw_led_blink_cmd()
      staging: r8188eu: remove rtw_readtssi_cmdrsp_callback()
      staging: r8188eu: remove rtw_set_ch_cmd()
      staging: r8188eu: remove rtw_set_csa_cmd()
      staging: r8188eu: remove rtw_setassocsta_cmd()
      staging: r8188eu: remove rtw_setbasicrate_cmd()
      staging: r8188eu: remove rtw_setbbreg_cmd()
      staging: r8188eu: remove rtw_setphy_cmd()
      staging: r8188eu: remove rtw_setrfreg_cmd()
      staging: r8188eu: remove rtw_setrttbl_cmd()
      staging: r8188eu: remove rtw_setstandby_cmd()
      staging: r8188eu: remove rtw_tdls_cmd()
      staging: r8188eu: remove dead led blink functions
      staging: r8188eu: remove dead led control functions
      staging: r8188eu: remove unnecessary comments
      staging: r8188eu: remove _InitHWLed()
      staging: r8188eu: remove LedStrategy from struct led_priv
      staging: r8188eu: remove ODM_CheckPowerStatus()
      staging: r8188eu: remove odm_DynamicBBPowerSaving()
      staging: r8188eu: remove odm_GlobalAdapterCheck()
      staging: r8188eu: remove SetHalDefVarHandler from struct hal_ops
      staging: r8188eu: remove GetHalDefVarHandler from struct hal_ops
      staging: r8188eu: remove init_xmit_priv from struct hal_ops
      staging: r8188eu: remove init_recv_priv from struct hal_ops
      staging: r8188eu: remove free_recv_priv from struct hal_ops
      staging: r8188eu: remove inirp_init from struct hal_ops
      staging: r8188eu: remove inirp_deinit from struct hal_ops
      staging: r8188eu: remove rtl8188e_silentreset_for_specific_platform()
      staging: r8188eu: remove SetHwRegHandler from hal_ops
      staging: r8188eu: remove GetHwRegHandler from hal_ops
      staging: r8188eu: remove hal_init from hal_ops
      staging: r8188eu: remove hal_ops
      staging: r8188eu: rename rtl8188eu_set_hal_ops()
      staging: r8188eu: remove unused defines from rtw_sreset.h
      staging: r8188eu: remove some dead code
      staging: r8188eu: remove unused macros and defines from rtl8188e_hal.h
      staging: r8188eu: replace MACADDRLEN with ETH_ALEN
      staging: r8188eu: remove enum _RTL8712_RF_MIMO_CONFIG_
      staging: r8188eu: remove empty functions from odm.c
      staging: r8188eu: remove ODM_SingleDualAntennaDefaultSetting()
      staging: r8188eu: remove GetPSDData()
      staging: r8188eu: remove ODM_AntselStatistics_88C()
      staging: r8188eu: pBandType is never set
      staging: r8188eu: pMacPhyMode is not used
      staging: r8188eu: remove ODM_CmnInfoPtrArrayHook()
      staging: r8188eu: remove unused constants and variables
      staging: r8188eu: remove unnecessary assignment
      staging: r8188eu: fix a gcc warning
      staging: r8188eu: remove duplicate structure
      staging: r8188eu: BTRxRSSIPercentage is set but never used
      staging: r8188eu: rename ODM_PhyStatusQuery_92CSeries()
      staging: r8188eu: remove unused cases from ODM_CmnInfo{Hook,Update}
      staging: r8188eu: remove unused fields from enum odm_common_info_def
      staging: r8188eu: remove unused enums and defines from odm.h
      staging: r8188eu: RFType type is always ODM_1T1R

Nathan Chancellor (1):
      staging: wlan-ng: Avoid bitwise vs logical OR warning in hfa384x_usb_throttlefn()

Nikita Yushchenko (4):
      staging: most: dim2: force fcnt=3 on Renesas GEN3
      staging: most: dim2: use if statements instead of ?: expressions
      staging: most: dim2: do not double-register the same device
      staging: most: dim2: use device release method

Ojaswin Mujoo (1):
      staging: vchiq: Replace function typedefs with equivalent declaration

Paulo Miguel Almeida (1):
      staging: pi433: fix docs typos and references to previous struct names

Pavel Skripkin (22):
      staging: r8188eu: fix memory leak in rtw_set_key
      staging: r8188eu: remove useless memset
      staging: r8188eu: remove useless check
      staging: r8188eu: remove _rtw_mutex_{init,free}
      staging: r8188eu: make _rtw_init_queue a macro
      staging: r8188eu: remove usb_{read,write}_mem()
      staging: r8188eu: remove the helpers of rtw_read8()
      staging: r8188eu: remove the helpers of rtw_read16()
      staging: r8188eu: remove the helpers of rtw_read32()
      staging: r8188eu: remove the helpers of usb_write8()
      staging: r8188eu: remove the helpers of usb_write16()
      staging: r8188eu: remove the helpers of usb_write32()
      staging: r8188eu: remove the helpers of usb_writeN()
      staging: r8188eu: remove the helpers of usb_read_port()
      staging: r8188eu: remove the helpers of usb_write_port()
      staging: r8188eu: remove the helpers of usb_read_port_cancel()
      staging: r8188eu: remove the helpers of usb_write_port_cancel()
      staging: r8188eu: remove core/rtw_io.c
      staging: r8188eu: remove struct _io_ops
      staging: r8188eu: remove shared buffer for USB requests
      staging: r8188eu: remove mutex 'usb_vendor_req_mutex'
      staging: rtl8712: fix use-after-free in rtl8712_dl_fw

Phillip Potter (18):
      staging: r8188eu: remove c2h_handler field from struct hal_ops
      staging: r8188eu: simplify c2h_evt_hdl function
      staging: r8188eu: remove rtw_hal_c2h_handler function
      staging: r8188eu: remove rtw_hal_reset_security_engine function
      staging: r8188eu: remove hal_reset_security_engine from struct hal_ops
      staging: r8188eu: remove rtw_hal_enable_interrupt function
      staging: r8188eu: remove enable_interrupt from struct hal_ops
      staging: r8188eu: remove rtw_hal_disable_interrupt function
      staging: r8188eu: remove disable_interrupt from struct hal_ops
      staging: r8188eu: remove rtw_hal_interrupt_handler function
      staging: r8188eu: remove interrupt_handler from struct hal_ops
      staging: r8188eu: remove rtw_hal_xmitframe_enqueue function
      staging: r8188eu: remove hal_xmitframe_enqueue from struct hal_ops
      staging: r8188eu: remove Efuse_PgPacketWrite_BT function
      staging: r8188eu: remove Efuse_PgPacketWrite_BT from struct hal_ops
      staging: r8188eu: remove rtw_hal_c2h_id_filter_ccx function
      staging: r8188eu: remove c2h_id_filter_ccx from struct hal_ops
      staging: r8188eu: remove MSG_88E calls from hal/usb_halinit.c

Saurav Girepunje (27):
      staging: r8188eu: core: remove null check before vfree
      staging: r8188eu: os_dep: remove unused static variable
      staging: r8188eu: core: remove unused function
      staging: r8188eu: core: remove condition with no effect
      staging: r8188eu: os_dep: use kmemdup instead of kzalloc and memcpy
      staging: r8188eu: hal: remove condition with no effect
      staging: r8188eu: core: remove condition never execute
      staging: r8188eu: include: remove duplicate declaration.
      staging: r8188eu: core: remove unused variable padapter
      staging: r8188eu: core: remove unused variable Adapter
      staging: r8188eu: os_dep: simplifiy the rtw_resume function
      staging: r8188eu: core: remove unused function rtw_set_tx_chksum_offload
      staging: rtl8723bs: core: remove condition never execute
      staging: rtl8723bs: core: remove reassignment of same value to variable
      staging: rtl8192e: remove unused variable ieee
      staging: rtl8192u: remove unused static variable
      staging: r8188eu: core: remove power_saving_wk_hdl function
      staging: r8188eu: core: remove unused variable pAdapter
      staging: r8188eu: core: remove unused variable local variable
      staging: r8188eu: hal: remove assignment to itself
      staging: r8188eu: core: remove duplicate condition check
      staging: rtl8723bs: hal: remove duplicate check
      staging: r8188eu: remove unused local variable
      staging: r8188eu: core: remove goto statement
      staging: r8188eu: core: remove the goto from rtw_IOL_accquire_xmit_frame
      staging: rtl8723bs: hal remove the assignment to itself
      staging: r8188eu: hal: remove goto statement and local variable

Sergio Paracuellos (16):
      MIPS: ralink: don't define PC_IOBASE but increase IO_SPACE_LIMIT
      staging: mt7621-pci: set end limit for 'ioport_resource'
      Revert "MIPS: ralink: don't define PC_IOBASE but increase IO_SPACE_LIMIT"
      Revert "staging: mt7621-pci: set end limit for 'ioport_resource'"
      MIPS: ralink: set PCI_IOBASE to 'mips_io_port_base'
      PCI: Allow architecture-specific pci_remap_iospace()
      MIPS: implement architecture-specific 'pci_remap_iospace()'
      staging: mt7621-pci: properly adjust base address for the IO window
      staging: mt7621-dts: properly define 'cpc' and 'mc' nodes
      MIPS: asm: pci: define arch-specific 'pci_remap_iospace()' dependent on 'CONFIG_PCI_DRIVERS_GENERIC'
      staging: mt7621-dts: change some node hex addresses to lower case
      staging: mt7621-dts: get rid of nodes with no in-tree driver
      staging: mt7621-dts: change palmbus address to lower case
      staging: mt7621-dts: make use of 'IRQ_TYPE_LEVEL_HIGH' instead of magic numbers
      staging: mt7621-dts: complete 'cpus' node
      staging: mt7621-dts: add missing SPDX license to files

Sidong Yang (1):
      staging: pi433: goto abort when setting failed in tx_thread

Siou-Jhih, Guo (1):
      staging: r8188eu: Fix misspelling in comment

Srivathsa Dara (2):
      staging: fbtft: fbtft-core: fix 'trailing statements should be on next line' coding style error
      staging: wfx: sta: Fix 'else' coding style warning

Stefan Wahren (3):
      staging: vchiq_arm: re-order vchiq_arm_init_state
      staging: vchiq_arm: drop unnecessary declarations
      staging: vchiq_arm: move platform structs to vchiq_arm.c

Tommaso Merciai (6):
      staging: vt6655: fix camelcase in pbyCxtBuf
      staging: vt6655: fix camelcase in bShortSlotTime
      staging: vt6655: fix camelcase in ldBmThreshold
      staging: vt6655: fix camelcase in PortOffset
      staging: vt6655: fix camelcase in byLocalID
      staging: vt6655: fix camelcase in byRate

Uwe Kleine-König (1):
      staging: fbtft: Make fbtft_remove_common() return void

Vegard Nossum (1):
      staging: ks7010: select CRYPTO_HASH/CRYPTO_MICHAEL_MIC

Wan Jiabing (1):
      staging: r8188eu: Use memdup_user instead of kmalloc/copy_from_user

Yang Yingliang (1):
      staging: r8188eu: fix missing unlock in rtw_resume()

xu xin (1):
      staging: r8118eu: remove useless parts of judgements from os_dep/ioctl_linux.

 arch/mips/include/asm/mach-ralink/spaces.h         |    4 +-
 arch/mips/include/asm/pci.h                        |    4 +
 arch/mips/pci/pci-generic.c                        |   14 +
 drivers/pci/pci.c                                  |    2 +
 drivers/staging/axis-fifo/axis-fifo.c              |   88 +-
 drivers/staging/fbtft/fbtft-core.c                 |   11 +-
 drivers/staging/fbtft/fbtft.h                      |    8 +-
 drivers/staging/fieldbus/anybuss/host.c            |    8 +-
 drivers/staging/gdm724x/gdm_lte.c                  |    4 +-
 drivers/staging/ks7010/Kconfig                     |    3 +
 drivers/staging/ks7010/ks_hostif.c                 |    2 +-
 drivers/staging/ks7010/ks_wlan_net.c               |    4 +-
 drivers/staging/most/dim2/Makefile                 |    2 +-
 drivers/staging/most/dim2/dim2.c                   |  115 +-
 drivers/staging/most/dim2/sysfs.c                  |   49 -
 drivers/staging/most/dim2/sysfs.h                  |   11 -
 drivers/staging/most/net/net.c                     |    2 +-
 drivers/staging/mt7621-dma/hsdma-mt7621.c          |    6 +-
 drivers/staging/mt7621-dts/gbpc1.dts               |    3 +-
 drivers/staging/mt7621-dts/gbpc2.dts               |    1 +
 drivers/staging/mt7621-dts/mt7621.dtsi             |   74 +-
 drivers/staging/mt7621-pci/pci-mt7621.c            |    2 +-
 drivers/staging/octeon/ethernet.c                  |    2 +-
 drivers/staging/pi433/pi433_if.c                   |   18 +-
 drivers/staging/pi433/pi433_if.h                   |   23 +-
 drivers/staging/qlge/qlge_main.c                   |   18 +-
 drivers/staging/qlge/qlge_mpi.c                    |    2 +-
 drivers/staging/r8188eu/Kconfig                    |   10 -
 drivers/staging/r8188eu/Makefile                   |  155 +-
 drivers/staging/r8188eu/core/rtw_ap.c              |  607 +----
 drivers/staging/r8188eu/core/rtw_br_ext.c          |    3 +-
 drivers/staging/r8188eu/core/rtw_cmd.c             |  618 +-----
 drivers/staging/r8188eu/core/rtw_debug.c           |  904 --------
 drivers/staging/r8188eu/core/rtw_efuse.c           |  582 +----
 drivers/staging/r8188eu/core/rtw_ieee80211.c       |  339 +--
 drivers/staging/r8188eu/core/rtw_io.c              |  299 ---
 drivers/staging/r8188eu/core/rtw_ioctl_set.c       |  397 +---
 drivers/staging/r8188eu/core/rtw_iol.c             |   34 +-
 drivers/staging/r8188eu/core/rtw_led.c             | 1365 +-----------
 drivers/staging/r8188eu/core/rtw_mlme.c            |  126 +-
 drivers/staging/r8188eu/core/rtw_mlme_ext.c        |  386 +---
 drivers/staging/r8188eu/core/rtw_mp.c              |  935 --------
 drivers/staging/r8188eu/core/rtw_mp_ioctl.c        | 1170 ----------
 drivers/staging/r8188eu/core/rtw_p2p.c             |   43 +-
 drivers/staging/r8188eu/core/rtw_pwrctrl.c         |  140 +-
 drivers/staging/r8188eu/core/rtw_recv.c            |  116 +-
 drivers/staging/r8188eu/core/rtw_rf.c              |   17 -
 drivers/staging/r8188eu/core/rtw_security.c        |  197 +-
 drivers/staging/r8188eu/core/rtw_sreset.c          |   62 -
 drivers/staging/r8188eu/core/rtw_sta_mgt.c         |   34 +-
 drivers/staging/r8188eu/core/rtw_wlan_util.c       |  157 +-
 drivers/staging/r8188eu/core/rtw_xmit.c            |  121 +-
 drivers/staging/r8188eu/hal/Hal8188ERateAdaptive.c |   22 +-
 drivers/staging/r8188eu/hal/HalHWImg8188E_BB.c     |   32 +-
 drivers/staging/r8188eu/hal/HalHWImg8188E_MAC.c    |   10 +-
 drivers/staging/r8188eu/hal/HalHWImg8188E_RF.c     |   15 +-
 drivers/staging/r8188eu/hal/HalPhyRf_8188e.c       |  171 +-
 drivers/staging/r8188eu/hal/hal_com.c              |   26 +-
 drivers/staging/r8188eu/hal/hal_intf.c             |  391 +---
 drivers/staging/r8188eu/hal/odm.c                  | 1188 +---------
 drivers/staging/r8188eu/hal/odm_HWConfig.c         |  393 +---
 drivers/staging/r8188eu/hal/odm_RTL8188E.c         |   31 +-
 drivers/staging/r8188eu/hal/odm_RegConfig8188E.c   |    8 -
 drivers/staging/r8188eu/hal/odm_interface.c        |   85 -
 drivers/staging/r8188eu/hal/rtl8188e_cmd.c         |   48 +-
 drivers/staging/r8188eu/hal/rtl8188e_dm.c          |   93 +-
 drivers/staging/r8188eu/hal/rtl8188e_hal_init.c    |  310 +--
 drivers/staging/r8188eu/hal/rtl8188e_mp.c          |  798 -------
 drivers/staging/r8188eu/hal/rtl8188e_phycfg.c      |  215 +-
 drivers/staging/r8188eu/hal/rtl8188e_rf6052.c      |  226 +-
 drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c      |    2 +-
 drivers/staging/r8188eu/hal/rtl8188e_sreset.c      |   27 -
 drivers/staging/r8188eu/hal/rtl8188eu_recv.c       |    4 +-
 drivers/staging/r8188eu/hal/rtl8188eu_xmit.c       |   60 +-
 drivers/staging/r8188eu/hal/usb_halinit.c          |  328 +--
 drivers/staging/r8188eu/hal/usb_ops_linux.c        |  256 +--
 drivers/staging/r8188eu/include/Hal8188EPhyCfg.h   |   91 -
 .../staging/r8188eu/include/Hal8188ERateAdaptive.h |    2 -
 drivers/staging/r8188eu/include/HalHWImg8188E_FW.h |   16 -
 drivers/staging/r8188eu/include/HalVerDef.h        |   70 -
 drivers/staging/r8188eu/include/drv_types.h        |   37 +-
 drivers/staging/r8188eu/include/hal_intf.h         |  312 +--
 drivers/staging/r8188eu/include/ieee80211.h        |   71 -
 drivers/staging/r8188eu/include/ioctl_cfg80211.h   |    2 -
 drivers/staging/r8188eu/include/mp_custom_oid.h    |  333 ---
 drivers/staging/r8188eu/include/odm.h              |  457 +---
 drivers/staging/r8188eu/include/odm_HWConfig.h     |   11 +-
 drivers/staging/r8188eu/include/odm_RTL8188E.h     |    2 -
 .../staging/r8188eu/include/odm_RegConfig8188E.h   |    3 -
 .../staging/r8188eu/include/odm_RegDefine11AC.h    |   29 -
 drivers/staging/r8188eu/include/odm_RegDefine11N.h |  112 +-
 drivers/staging/r8188eu/include/odm_interface.h    |   88 -
 drivers/staging/r8188eu/include/odm_precomp.h      |   22 -
 drivers/staging/r8188eu/include/odm_reg.h          |   89 -
 drivers/staging/r8188eu/include/odm_types.h        |   24 -
 drivers/staging/r8188eu/include/osdep_intf.h       |    5 -
 drivers/staging/r8188eu/include/osdep_service.h    |   42 +-
 drivers/staging/r8188eu/include/recv_osdep.h       |    2 -
 drivers/staging/r8188eu/include/rtl8188e_cmd.h     |   16 -
 drivers/staging/r8188eu/include/rtl8188e_dm.h      |   13 -
 drivers/staging/r8188eu/include/rtl8188e_hal.h     |  102 +-
 drivers/staging/r8188eu/include/rtl8188e_led.h     |    2 -
 drivers/staging/r8188eu/include/rtl8188e_recv.h    |    2 +-
 drivers/staging/r8188eu/include/rtl8188e_rf.h      |    1 -
 drivers/staging/r8188eu/include/rtl8188e_spec.h    |    4 -
 drivers/staging/r8188eu/include/rtl8188e_sreset.h  |    2 -
 drivers/staging/r8188eu/include/rtw_ap.h           |   11 -
 drivers/staging/r8188eu/include/rtw_br_ext.h       |    3 +-
 drivers/staging/r8188eu/include/rtw_cmd.h          |   27 +-
 drivers/staging/r8188eu/include/rtw_debug.h        |  156 --
 drivers/staging/r8188eu/include/rtw_eeprom.h       |   57 +-
 drivers/staging/r8188eu/include/rtw_efuse.h        |   21 -
 drivers/staging/r8188eu/include/rtw_io.h           |   87 +-
 drivers/staging/r8188eu/include/rtw_ioctl_rtl.h    |   63 -
 drivers/staging/r8188eu/include/rtw_ioctl_set.h    |    8 -
 drivers/staging/r8188eu/include/rtw_iol.h          |    5 -
 drivers/staging/r8188eu/include/rtw_led.h          |   20 -
 drivers/staging/r8188eu/include/rtw_mlme.h         |   11 -
 drivers/staging/r8188eu/include/rtw_mlme_ext.h     |   14 -
 drivers/staging/r8188eu/include/rtw_mp.h           |  474 ----
 drivers/staging/r8188eu/include/rtw_mp_ioctl.h     |  242 --
 .../staging/r8188eu/include/rtw_mp_phy_regdef.h    | 1063 ---------
 drivers/staging/r8188eu/include/rtw_p2p.h          |    1 -
 drivers/staging/r8188eu/include/rtw_pwrctrl.h      |  130 +-
 drivers/staging/r8188eu/include/rtw_recv.h         |    6 -
 drivers/staging/r8188eu/include/rtw_rf.h           |   12 -
 drivers/staging/r8188eu/include/rtw_security.h     |   20 +-
 drivers/staging/r8188eu/include/rtw_sreset.h       |   34 -
 drivers/staging/r8188eu/include/rtw_xmit.h         |    6 -
 drivers/staging/r8188eu/include/sta_info.h         |    7 -
 drivers/staging/r8188eu/include/usb_ops.h          |    5 -
 drivers/staging/r8188eu/include/usb_ops_linux.h    |    8 -
 drivers/staging/r8188eu/include/usb_osintf.h       |    5 +-
 drivers/staging/r8188eu/include/wifi.h             |   52 -
 drivers/staging/r8188eu/include/xmit_osdep.h       |    2 -
 drivers/staging/r8188eu/os_dep/ioctl_linux.c       | 2331 +-------------------
 drivers/staging/r8188eu/os_dep/mlme_linux.c        |    6 -
 drivers/staging/r8188eu/os_dep/os_intfs.c          |  399 +---
 drivers/staging/r8188eu/os_dep/osdep_service.c     |   82 +-
 drivers/staging/r8188eu/os_dep/recv_linux.c        |   14 -
 drivers/staging/r8188eu/os_dep/usb_intf.c          |  285 +--
 drivers/staging/r8188eu/os_dep/usb_ops_linux.c     |   40 +-
 drivers/staging/r8188eu/os_dep/xmit_linux.c        |    4 -
 drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c     |    7 +-
 drivers/staging/rtl8192e/rtl8192e/rtl_cam.c        |    4 +-
 drivers/staging/rtl8192e/rtl8192e/rtl_core.c       |    2 +-
 drivers/staging/rtl8192e/rtl819x_BAProc.c          |    9 +-
 drivers/staging/rtl8192u/r8192U.h                  |    3 +-
 drivers/staging/rtl8192u/r8192U_core.c             |   36 +-
 drivers/staging/rtl8712/os_intfs.c                 |    9 +-
 drivers/staging/rtl8712/rtl871x_cmd.c              |    2 +-
 drivers/staging/rtl8712/rtl871x_cmd.h              |    2 +-
 drivers/staging/rtl8712/rtl871x_xmit.h             |   10 +-
 drivers/staging/rtl8712/usb_intf.c                 |    6 +-
 drivers/staging/rtl8712/usb_ops_linux.c            |    2 +-
 drivers/staging/rtl8723bs/Kconfig                  |    1 +
 drivers/staging/rtl8723bs/core/rtw_ap.c            |   23 +-
 drivers/staging/rtl8723bs/core/rtw_cmd.c           |  210 +-
 drivers/staging/rtl8723bs/core/rtw_ioctl_set.c     |    4 +-
 drivers/staging/rtl8723bs/core/rtw_mlme.c          |   24 +-
 drivers/staging/rtl8723bs/core/rtw_mlme_ext.c      |   79 +-
 drivers/staging/rtl8723bs/core/rtw_recv.c          |   22 +-
 drivers/staging/rtl8723bs/core/rtw_security.c      |    6 +-
 drivers/staging/rtl8723bs/core/rtw_sta_mgt.c       |   48 +-
 drivers/staging/rtl8723bs/core/rtw_xmit.c          |   49 +-
 drivers/staging/rtl8723bs/hal/odm_DIG.c            |    2 +-
 drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c  |   12 -
 drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c     |    6 +-
 drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c     |    2 -
 drivers/staging/rtl8723bs/include/osdep_service.h  |    2 +-
 drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c  |   26 +-
 drivers/staging/rtl8723bs/os_dep/ioctl_linux.c     |   34 +-
 drivers/staging/rtl8723bs/os_dep/os_intfs.c        |    8 +-
 drivers/staging/rtl8723bs/os_dep/osdep_service.c   |   11 +-
 drivers/staging/rts5208/ms.c                       |   42 +-
 drivers/staging/rts5208/rtsx.c                     |    2 +-
 drivers/staging/rts5208/rtsx_card.c                |    8 +-
 drivers/staging/rts5208/rtsx_chip.c                |   16 +-
 drivers/staging/rts5208/rtsx_scsi.c                |  106 +-
 drivers/staging/rts5208/rtsx_transport.c           |    6 +-
 drivers/staging/rts5208/sd.c                       |   68 +-
 drivers/staging/rts5208/xd.c                       |   48 +-
 drivers/staging/unisys/visornic/visornic_main.c    |    5 +-
 .../vc04_services/interface/vchiq_arm/vchiq_arm.c  |  298 ++-
 .../vc04_services/interface/vchiq_arm/vchiq_arm.h  |   52 -
 .../interface/vchiq_arm/vchiq_connected.c          |   20 +-
 .../interface/vchiq_arm/vchiq_connected.h          |    4 +-
 .../vc04_services/interface/vchiq_arm/vchiq_core.c |  771 +++----
 .../vc04_services/interface/vchiq_arm/vchiq_core.h |  107 +-
 .../vc04_services/interface/vchiq_arm/vchiq_dev.c  |  182 +-
 drivers/staging/vt6655/baseband.c                  |   74 +-
 drivers/staging/vt6655/baseband.h                  |    2 +-
 drivers/staging/vt6655/card.c                      |   98 +-
 drivers/staging/vt6655/channel.c                   |   12 +-
 drivers/staging/vt6655/device.h                    |   10 +-
 drivers/staging/vt6655/device_main.c               |  162 +-
 drivers/staging/vt6655/dpc.c                       |    2 +-
 drivers/staging/vt6655/key.c                       |    2 +-
 drivers/staging/vt6655/mac.c                       |   50 +-
 drivers/staging/vt6655/mac.h                       |    6 +-
 drivers/staging/vt6655/power.c                     |   24 +-
 drivers/staging/vt6655/rf.c                        |  140 +-
 drivers/staging/vt6655/rf.h                        |    2 +-
 drivers/staging/vt6655/rxtx.c                      |   64 +-
 drivers/staging/wfx/bh.c                           |   37 +-
 drivers/staging/wfx/bh.h                           |    4 +-
 drivers/staging/wfx/bus_sdio.c                     |   25 +-
 drivers/staging/wfx/bus_spi.c                      |   22 +-
 drivers/staging/wfx/data_rx.c                      |    7 +-
 drivers/staging/wfx/data_rx.h                      |    4 +-
 drivers/staging/wfx/data_tx.c                      |   87 +-
 drivers/staging/wfx/data_tx.h                      |    6 +-
 drivers/staging/wfx/debug.c                        |   56 +-
 drivers/staging/wfx/debug.h                        |    2 +-
 drivers/staging/wfx/fwio.c                         |   26 +-
 drivers/staging/wfx/fwio.h                         |    2 +-
 drivers/staging/wfx/hif_api_cmd.h                  |   14 +-
 drivers/staging/wfx/hif_api_general.h              |   25 +-
 drivers/staging/wfx/hif_api_mib.h                  |   85 +-
 drivers/staging/wfx/hif_rx.c                       |   23 +-
 drivers/staging/wfx/hif_rx.h                       |    3 +-
 drivers/staging/wfx/hif_tx.c                       |   60 +-
 drivers/staging/wfx/hif_tx.h                       |    6 +-
 drivers/staging/wfx/hif_tx_mib.c                   |   14 +-
 drivers/staging/wfx/hif_tx_mib.h                   |    2 +-
 drivers/staging/wfx/hwio.c                         |    6 +-
 drivers/staging/wfx/hwio.h                         |   20 +-
 drivers/staging/wfx/key.c                          |   30 +-
 drivers/staging/wfx/key.h                          |    4 +-
 drivers/staging/wfx/main.c                         |   37 +-
 drivers/staging/wfx/main.h                         |    3 +-
 drivers/staging/wfx/queue.c                        |   43 +-
 drivers/staging/wfx/queue.h                        |    6 +-
 drivers/staging/wfx/scan.c                         |   51 +-
 drivers/staging/wfx/scan.h                         |    4 +-
 drivers/staging/wfx/sta.c                          |  118 +-
 drivers/staging/wfx/sta.h                          |    8 +-
 drivers/staging/wfx/traces.h                       |    2 +-
 drivers/staging/wfx/wfx.h                          |   14 +-
 drivers/staging/wlan-ng/hfa384x.h                  |    2 +-
 drivers/staging/wlan-ng/hfa384x_usb.c              |   24 +-
 drivers/staging/wlan-ng/p80211conv.c               |    2 +-
 drivers/staging/wlan-ng/p80211conv.h               |    2 +-
 drivers/staging/wlan-ng/p80211hdr.h                |    2 +-
 drivers/staging/wlan-ng/p80211ioctl.h              |    2 +-
 drivers/staging/wlan-ng/p80211mgmt.h               |    2 +-
 drivers/staging/wlan-ng/p80211msg.h                |    2 +-
 drivers/staging/wlan-ng/p80211netdev.c             |    4 +-
 drivers/staging/wlan-ng/p80211netdev.h             |    2 +-
 drivers/staging/wlan-ng/p80211req.c                |    2 +-
 drivers/staging/wlan-ng/p80211req.h                |    2 +-
 drivers/staging/wlan-ng/p80211types.h              |    2 +-
 drivers/staging/wlan-ng/p80211wep.c                |    2 +-
 drivers/staging/wlan-ng/prism2mgmt.c               |    2 +-
 drivers/staging/wlan-ng/prism2mgmt.h               |    2 +-
 drivers/staging/wlan-ng/prism2mib.c                |    2 +-
 drivers/staging/wlan-ng/prism2sta.c                |    6 +-
 drivers/staging/wlan-ng/prism2usb.c                |    3 +-
 258 files changed, 3323 insertions(+), 22353 deletions(-)
 delete mode 100644 drivers/staging/most/dim2/sysfs.c
 delete mode 100644 drivers/staging/r8188eu/core/rtw_debug.c
 delete mode 100644 drivers/staging/r8188eu/core/rtw_io.c
 delete mode 100644 drivers/staging/r8188eu/core/rtw_mp.c
 delete mode 100644 drivers/staging/r8188eu/core/rtw_mp_ioctl.c
 delete mode 100644 drivers/staging/r8188eu/core/rtw_sreset.c
 delete mode 100644 drivers/staging/r8188eu/hal/rtl8188e_mp.c
 delete mode 100644 drivers/staging/r8188eu/include/HalHWImg8188E_FW.h
 delete mode 100644 drivers/staging/r8188eu/include/mp_custom_oid.h
 delete mode 100644 drivers/staging/r8188eu/include/odm_RegDefine11AC.h
 delete mode 100644 drivers/staging/r8188eu/include/odm_reg.h
 delete mode 100644 drivers/staging/r8188eu/include/rtw_ioctl_rtl.h
 delete mode 100644 drivers/staging/r8188eu/include/rtw_mp.h
 delete mode 100644 drivers/staging/r8188eu/include/rtw_mp_ioctl.h
 delete mode 100644 drivers/staging/r8188eu/include/rtw_mp_phy_regdef.h
 delete mode 100644 drivers/staging/r8188eu/include/rtw_sreset.h

^ permalink raw reply

* Re: [PATCH v2 3/8] staging: vt6655: Remove unused `i` increments
From: Dan Carpenter @ 2021-11-04 13:38 UTC (permalink / raw)
  To: Karolina Drobnik
  Cc: outreachy-kernel, gregkh, forest, linux-staging, linux-kernel
In-Reply-To: <79a4f03c8f2bfa555ea149ddd1c0f938dd431a0b.1635773680.git.karolinadrobnik@gmail.com>

On Mon, Nov 01, 2021 at 02:32:01PM +0000, Karolina Drobnik wrote:
> Commit c569952d92ba ("staging: vt6655: Use incrementation in `idx`")
> rendered the incrementation of `i` outside of the loop unnecessary
> so it can be deleted.
> 

That commit hash is something that only exists on your system.  Commit
hashes are stable once they hit Greg's tree (he only rebases in extremely
rarely cases).

This commit is cleaning something that was left in a different patch in
the same patch set.  Just merge it into the original patch.  Don't make
a mess and then fix it.

It's tricky to know how to break up patches.  My suggestion is:
patch 1: remove all the unnecesary (unsigned short) casts
patch 2: merge the rest of patches 1-3 together and send it at once

The rest of the patchset is fine.

regards,
dan carpenter


^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox