Re: [PATCH v5 08/16] media: rkisp1: add capture device driver
On 12/29/17 08:52, Shunqian Zheng wrote: > From: Jacob Chen > > This is the capture device interface driver that provides the v4l2 > user interface. Frames can be received from ISP1. > > Signed-off-by: Jacob Chen > Signed-off-by: Shunqian Zheng > Signed-off-by: Yichong Zhong > Signed-off-by: Jacob Chen > Signed-off-by: Eddie Cai > Signed-off-by: Jeffy Chen > Signed-off-by: Allon Huang > Signed-off-by: Tomasz Figa > --- > drivers/media/platform/rockchip/isp1/capture.c | 1728 > > drivers/media/platform/rockchip/isp1/capture.h | 194 +++ > drivers/media/platform/rockchip/isp1/regs.c| 266 > drivers/media/platform/rockchip/isp1/regs.h| 1577 + > 4 files changed, 3765 insertions(+) > create mode 100644 drivers/media/platform/rockchip/isp1/capture.c > create mode 100644 drivers/media/platform/rockchip/isp1/capture.h > create mode 100644 drivers/media/platform/rockchip/isp1/regs.c > create mode 100644 drivers/media/platform/rockchip/isp1/regs.h > > diff --git a/drivers/media/platform/rockchip/isp1/capture.c > b/drivers/media/platform/rockchip/isp1/capture.c > new file mode 100644 > index 000..a232dce > --- /dev/null > +++ b/drivers/media/platform/rockchip/isp1/capture.c > @@ -0,0 +1,1729 @@ > +/* > + * Rockchip isp1 driver > + * > + * Copyright (C) 2017 Rockchip Electronics Co., Ltd. > + * > + * This software is available to you under a choice of one of two > + * licenses. You may choose to be licensed under the terms of the GNU > + * General Public License (GPL) Version 2, available from the file > + * COPYING in the main directory of this source tree, or the > + * OpenIB.org BSD license below: > + * > + * Redistribution and use in source and binary forms, with or > + * without modification, are permitted provided that the following > + * conditions are met: > + * > + * - Redistributions of source code must retain the above > + *copyright notice, this list of conditions and the following > + *disclaimer. > + * > + * - Redistributions in binary form must reproduce the above > + *copyright notice, this list of conditions and the following > + *disclaimer in the documentation and/or other materials > + *provided with the distribution. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND > + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS > + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN > + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN > + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > + * SOFTWARE. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include "dev.h" > +#include "regs.h" > + > +/* > + * NOTE: > + * 1. There are two capture video devices in rkisp1, selfpath and mainpath > + * 2. Two capture device have separated memory-interface/crop/scale units. > + * 3. Besides describing stream hardware, this file also contain entries > + *for pipeline operations. > + * 4. The register read/write operations in this file are put into regs.c. > + */ > + > +/* > + * differences between selfpatch and mainpath > + * available mp sink input: isp > + * available sp sink input : isp, dma(TODO) > + * available mp sink pad fmts: yuv422, raw > + * available sp sink pad fmts: yuv422, yuv420.. > + * available mp source fmts: yuv, raw, jpeg(TODO) > + * available sp source fmts: yuv, rgb > + */ > + > +#define CIF_ISP_REQ_BUFS_MIN 1 > +#define CIF_ISP_REQ_BUFS_MAX 8 > + > +#define STREAM_PAD_SINK 0 > +#define STREAM_PAD_SOURCE1 > + > +#define STREAM_MAX_MP_RSZ_OUTPUT_WIDTH 4416 > +#define STREAM_MAX_MP_RSZ_OUTPUT_HEIGHT 3312 > +#define STREAM_MAX_SP_RSZ_OUTPUT_WIDTH 1920 > +#define STREAM_MAX_SP_RSZ_OUTPUT_HEIGHT 1920 > +#define STREAM_MIN_RSZ_OUTPUT_WIDTH 32 > +#define STREAM_MIN_RSZ_OUTPUT_HEIGHT 16 > + > +#define STREAM_MAX_MP_SP_INPUT_WIDTH STREAM_MAX_MP_RSZ_OUTPUT_WIDTH > +#define STREAM_MAX_MP_SP_INPUT_HEIGHT STREAM_MAX_MP_RSZ_OUTPUT_HEIGHT > +#define STREAM_MIN_MP_SP_INPUT_WIDTH 32 > +#define STREAM_MIN_MP_SP_INPUT_HEIGHT32 > + > +/* Get xsubs and ysubs for fourcc formats > + * > + * @xsubs: horizontal color samples in a 4*4 matrix, for yuv > + * @ysubs: vertical color samples in a 4*4 matrix, for yuv > + */ > +static int fcc_xysubs(u32 fcc, u32 *xsubs, u32 *ysubs) > +{ > + switch (fcc) { > + case V4L2_PIX_FMT_GREY: > + case V4L2_PIX_FMT_YUV444M: > + *xsubs = 1; > + *ysubs = 1; > + break; > + case V4L2_PIX_FMT_YUYV: > + case V4L2_PIX_FMT_YVYU: > + case V4L2_PIX_FMT
[PATCH v5 08/16] media: rkisp1: add capture device driver
From: Jacob Chen This is the capture device interface driver that provides the v4l2 user interface. Frames can be received from ISP1. Signed-off-by: Jacob Chen Signed-off-by: Shunqian Zheng Signed-off-by: Yichong Zhong Signed-off-by: Jacob Chen Signed-off-by: Eddie Cai Signed-off-by: Jeffy Chen Signed-off-by: Allon Huang Signed-off-by: Tomasz Figa --- drivers/media/platform/rockchip/isp1/capture.c | 1728 drivers/media/platform/rockchip/isp1/capture.h | 194 +++ drivers/media/platform/rockchip/isp1/regs.c| 266 drivers/media/platform/rockchip/isp1/regs.h| 1577 + 4 files changed, 3765 insertions(+) create mode 100644 drivers/media/platform/rockchip/isp1/capture.c create mode 100644 drivers/media/platform/rockchip/isp1/capture.h create mode 100644 drivers/media/platform/rockchip/isp1/regs.c create mode 100644 drivers/media/platform/rockchip/isp1/regs.h diff --git a/drivers/media/platform/rockchip/isp1/capture.c b/drivers/media/platform/rockchip/isp1/capture.c new file mode 100644 index 000..a232dce --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/capture.c @@ -0,0 +1,1729 @@ +/* + * Rockchip isp1 driver + * + * Copyright (C) 2017 Rockchip Electronics Co., Ltd. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + *copyright notice, this list of conditions and the following + *disclaimer. + * + * - Redistributions in binary form must reproduce the above + *copyright notice, this list of conditions and the following + *disclaimer in the documentation and/or other materials + *provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "dev.h" +#include "regs.h" + +/* + * NOTE: + * 1. There are two capture video devices in rkisp1, selfpath and mainpath + * 2. Two capture device have separated memory-interface/crop/scale units. + * 3. Besides describing stream hardware, this file also contain entries + *for pipeline operations. + * 4. The register read/write operations in this file are put into regs.c. + */ + +/* + * differences between selfpatch and mainpath + * available mp sink input: isp + * available sp sink input : isp, dma(TODO) + * available mp sink pad fmts: yuv422, raw + * available sp sink pad fmts: yuv422, yuv420.. + * available mp source fmts: yuv, raw, jpeg(TODO) + * available sp source fmts: yuv, rgb + */ + +#define CIF_ISP_REQ_BUFS_MIN 1 +#define CIF_ISP_REQ_BUFS_MAX 8 + +#define STREAM_PAD_SINK0 +#define STREAM_PAD_SOURCE 1 + +#define STREAM_MAX_MP_RSZ_OUTPUT_WIDTH 4416 +#define STREAM_MAX_MP_RSZ_OUTPUT_HEIGHT3312 +#define STREAM_MAX_SP_RSZ_OUTPUT_WIDTH 1920 +#define STREAM_MAX_SP_RSZ_OUTPUT_HEIGHT1920 +#define STREAM_MIN_RSZ_OUTPUT_WIDTH32 +#define STREAM_MIN_RSZ_OUTPUT_HEIGHT 16 + +#define STREAM_MAX_MP_SP_INPUT_WIDTH STREAM_MAX_MP_RSZ_OUTPUT_WIDTH +#define STREAM_MAX_MP_SP_INPUT_HEIGHT STREAM_MAX_MP_RSZ_OUTPUT_HEIGHT +#define STREAM_MIN_MP_SP_INPUT_WIDTH 32 +#define STREAM_MIN_MP_SP_INPUT_HEIGHT 32 + +/* Get xsubs and ysubs for fourcc formats + * + * @xsubs: horizontal color samples in a 4*4 matrix, for yuv + * @ysubs: vertical color samples in a 4*4 matrix, for yuv + */ +static int fcc_xysubs(u32 fcc, u32 *xsubs, u32 *ysubs) +{ + switch (fcc) { + case V4L2_PIX_FMT_GREY: + case V4L2_PIX_FMT_YUV444M: + *xsubs = 1; + *ysubs = 1; + break; + case V4L2_PIX_FMT_YUYV: + case V4L2_PIX_FMT_YVYU: + case V4L2_PIX_FMT_VYUY: + case V4L2_PIX_FMT_YUV422P: + case V4L2_PIX_FMT_NV16: + case V4L2_PIX_FMT_NV61: + case V4L2_PIX_FMT_YVU422M: + *xsubs = 2; + *ysubs = 1; + break; + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_NV12: +