cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pxa_camera.c (66895B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * V4L2 Driver for PXA camera host
      4 *
      5 * Copyright (C) 2006, Sascha Hauer, Pengutronix
      6 * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
      7 * Copyright (C) 2016, Robert Jarzmik <robert.jarzmik@free.fr>
      8 */
      9
     10#include <linux/init.h>
     11#include <linux/module.h>
     12#include <linux/io.h>
     13#include <linux/delay.h>
     14#include <linux/device.h>
     15#include <linux/dma-mapping.h>
     16#include <linux/err.h>
     17#include <linux/errno.h>
     18#include <linux/fs.h>
     19#include <linux/interrupt.h>
     20#include <linux/kernel.h>
     21#include <linux/mm.h>
     22#include <linux/moduleparam.h>
     23#include <linux/of.h>
     24#include <linux/of_graph.h>
     25#include <linux/time.h>
     26#include <linux/platform_device.h>
     27#include <linux/clk.h>
     28#include <linux/sched.h>
     29#include <linux/slab.h>
     30#include <linux/dmaengine.h>
     31#include <linux/dma/pxa-dma.h>
     32
     33#include <media/v4l2-async.h>
     34#include <media/v4l2-common.h>
     35#include <media/v4l2-ctrls.h>
     36#include <media/v4l2-device.h>
     37#include <media/v4l2-event.h>
     38#include <media/v4l2-ioctl.h>
     39#include <media/v4l2-fwnode.h>
     40
     41#include <media/videobuf2-dma-sg.h>
     42
     43#include <linux/videodev2.h>
     44
     45#include <linux/platform_data/media/camera-pxa.h>
     46
     47#define PXA_CAM_VERSION "0.0.6"
     48#define PXA_CAM_DRV_NAME "pxa27x-camera"
     49
     50#define DEFAULT_WIDTH	640
     51#define DEFAULT_HEIGHT	480
     52
     53/* Camera Interface */
     54#define CICR0		0x0000
     55#define CICR1		0x0004
     56#define CICR2		0x0008
     57#define CICR3		0x000C
     58#define CICR4		0x0010
     59#define CISR		0x0014
     60#define CIFR		0x0018
     61#define CITOR		0x001C
     62#define CIBR0		0x0028
     63#define CIBR1		0x0030
     64#define CIBR2		0x0038
     65
     66#define CICR0_DMAEN	(1UL << 31)	/* DMA request enable */
     67#define CICR0_PAR_EN	(1 << 30)	/* Parity enable */
     68#define CICR0_SL_CAP_EN	(1 << 29)	/* Capture enable for slave mode */
     69#define CICR0_ENB	(1 << 28)	/* Camera interface enable */
     70#define CICR0_DIS	(1 << 27)	/* Camera interface disable */
     71#define CICR0_SIM	(0x7 << 24)	/* Sensor interface mode mask */
     72#define CICR0_TOM	(1 << 9)	/* Time-out mask */
     73#define CICR0_RDAVM	(1 << 8)	/* Receive-data-available mask */
     74#define CICR0_FEM	(1 << 7)	/* FIFO-empty mask */
     75#define CICR0_EOLM	(1 << 6)	/* End-of-line mask */
     76#define CICR0_PERRM	(1 << 5)	/* Parity-error mask */
     77#define CICR0_QDM	(1 << 4)	/* Quick-disable mask */
     78#define CICR0_CDM	(1 << 3)	/* Disable-done mask */
     79#define CICR0_SOFM	(1 << 2)	/* Start-of-frame mask */
     80#define CICR0_EOFM	(1 << 1)	/* End-of-frame mask */
     81#define CICR0_FOM	(1 << 0)	/* FIFO-overrun mask */
     82
     83#define CICR1_TBIT	(1UL << 31)	/* Transparency bit */
     84#define CICR1_RGBT_CONV	(0x3 << 29)	/* RGBT conversion mask */
     85#define CICR1_PPL	(0x7ff << 15)	/* Pixels per line mask */
     86#define CICR1_RGB_CONV	(0x7 << 12)	/* RGB conversion mask */
     87#define CICR1_RGB_F	(1 << 11)	/* RGB format */
     88#define CICR1_YCBCR_F	(1 << 10)	/* YCbCr format */
     89#define CICR1_RGB_BPP	(0x7 << 7)	/* RGB bis per pixel mask */
     90#define CICR1_RAW_BPP	(0x3 << 5)	/* Raw bis per pixel mask */
     91#define CICR1_COLOR_SP	(0x3 << 3)	/* Color space mask */
     92#define CICR1_DW	(0x7 << 0)	/* Data width mask */
     93
     94#define CICR2_BLW	(0xff << 24)	/* Beginning-of-line pixel clock
     95					   wait count mask */
     96#define CICR2_ELW	(0xff << 16)	/* End-of-line pixel clock
     97					   wait count mask */
     98#define CICR2_HSW	(0x3f << 10)	/* Horizontal sync pulse width mask */
     99#define CICR2_BFPW	(0x3f << 3)	/* Beginning-of-frame pixel clock
    100					   wait count mask */
    101#define CICR2_FSW	(0x7 << 0)	/* Frame stabilization
    102					   wait count mask */
    103
    104#define CICR3_BFW	(0xff << 24)	/* Beginning-of-frame line clock
    105					   wait count mask */
    106#define CICR3_EFW	(0xff << 16)	/* End-of-frame line clock
    107					   wait count mask */
    108#define CICR3_VSW	(0x3f << 10)	/* Vertical sync pulse width mask */
    109#define CICR3_BFPW	(0x3f << 3)	/* Beginning-of-frame pixel clock
    110					   wait count mask */
    111#define CICR3_LPF	(0x7ff << 0)	/* Lines per frame mask */
    112
    113#define CICR4_MCLK_DLY	(0x3 << 24)	/* MCLK Data Capture Delay mask */
    114#define CICR4_PCLK_EN	(1 << 23)	/* Pixel clock enable */
    115#define CICR4_PCP	(1 << 22)	/* Pixel clock polarity */
    116#define CICR4_HSP	(1 << 21)	/* Horizontal sync polarity */
    117#define CICR4_VSP	(1 << 20)	/* Vertical sync polarity */
    118#define CICR4_MCLK_EN	(1 << 19)	/* MCLK enable */
    119#define CICR4_FR_RATE	(0x7 << 8)	/* Frame rate mask */
    120#define CICR4_DIV	(0xff << 0)	/* Clock divisor mask */
    121
    122#define CISR_FTO	(1 << 15)	/* FIFO time-out */
    123#define CISR_RDAV_2	(1 << 14)	/* Channel 2 receive data available */
    124#define CISR_RDAV_1	(1 << 13)	/* Channel 1 receive data available */
    125#define CISR_RDAV_0	(1 << 12)	/* Channel 0 receive data available */
    126#define CISR_FEMPTY_2	(1 << 11)	/* Channel 2 FIFO empty */
    127#define CISR_FEMPTY_1	(1 << 10)	/* Channel 1 FIFO empty */
    128#define CISR_FEMPTY_0	(1 << 9)	/* Channel 0 FIFO empty */
    129#define CISR_EOL	(1 << 8)	/* End of line */
    130#define CISR_PAR_ERR	(1 << 7)	/* Parity error */
    131#define CISR_CQD	(1 << 6)	/* Camera interface quick disable */
    132#define CISR_CDD	(1 << 5)	/* Camera interface disable done */
    133#define CISR_SOF	(1 << 4)	/* Start of frame */
    134#define CISR_EOF	(1 << 3)	/* End of frame */
    135#define CISR_IFO_2	(1 << 2)	/* FIFO overrun for Channel 2 */
    136#define CISR_IFO_1	(1 << 1)	/* FIFO overrun for Channel 1 */
    137#define CISR_IFO_0	(1 << 0)	/* FIFO overrun for Channel 0 */
    138
    139#define CIFR_FLVL2	(0x7f << 23)	/* FIFO 2 level mask */
    140#define CIFR_FLVL1	(0x7f << 16)	/* FIFO 1 level mask */
    141#define CIFR_FLVL0	(0xff << 8)	/* FIFO 0 level mask */
    142#define CIFR_THL_0	(0x3 << 4)	/* Threshold Level for Channel 0 FIFO */
    143#define CIFR_RESET_F	(1 << 3)	/* Reset input FIFOs */
    144#define CIFR_FEN2	(1 << 2)	/* FIFO enable for channel 2 */
    145#define CIFR_FEN1	(1 << 1)	/* FIFO enable for channel 1 */
    146#define CIFR_FEN0	(1 << 0)	/* FIFO enable for channel 0 */
    147
    148#define CICR0_SIM_MP	(0 << 24)
    149#define CICR0_SIM_SP	(1 << 24)
    150#define CICR0_SIM_MS	(2 << 24)
    151#define CICR0_SIM_EP	(3 << 24)
    152#define CICR0_SIM_ES	(4 << 24)
    153
    154#define CICR1_DW_VAL(x)   ((x) & CICR1_DW)	    /* Data bus width */
    155#define CICR1_PPL_VAL(x)  (((x) << 15) & CICR1_PPL) /* Pixels per line */
    156#define CICR1_COLOR_SP_VAL(x)	(((x) << 3) & CICR1_COLOR_SP)	/* color space */
    157#define CICR1_RGB_BPP_VAL(x)	(((x) << 7) & CICR1_RGB_BPP)	/* bpp for rgb */
    158#define CICR1_RGBT_CONV_VAL(x)	(((x) << 29) & CICR1_RGBT_CONV)	/* rgbt conv */
    159
    160#define CICR2_BLW_VAL(x)  (((x) << 24) & CICR2_BLW) /* Beginning-of-line pixel clock wait count */
    161#define CICR2_ELW_VAL(x)  (((x) << 16) & CICR2_ELW) /* End-of-line pixel clock wait count */
    162#define CICR2_HSW_VAL(x)  (((x) << 10) & CICR2_HSW) /* Horizontal sync pulse width */
    163#define CICR2_BFPW_VAL(x) (((x) << 3) & CICR2_BFPW) /* Beginning-of-frame pixel clock wait count */
    164#define CICR2_FSW_VAL(x)  (((x) << 0) & CICR2_FSW)  /* Frame stabilization wait count */
    165
    166#define CICR3_BFW_VAL(x)  (((x) << 24) & CICR3_BFW) /* Beginning-of-frame line clock wait count  */
    167#define CICR3_EFW_VAL(x)  (((x) << 16) & CICR3_EFW) /* End-of-frame line clock wait count */
    168#define CICR3_VSW_VAL(x)  (((x) << 11) & CICR3_VSW) /* Vertical sync pulse width */
    169#define CICR3_LPF_VAL(x)  (((x) << 0) & CICR3_LPF)  /* Lines per frame */
    170
    171#define CICR0_IRQ_MASK (CICR0_TOM | CICR0_RDAVM | CICR0_FEM | CICR0_EOLM | \
    172			CICR0_PERRM | CICR0_QDM | CICR0_CDM | CICR0_SOFM | \
    173			CICR0_EOFM | CICR0_FOM)
    174
    175#define sensor_call(cam, o, f, args...) \
    176	v4l2_subdev_call(cam->sensor, o, f, ##args)
    177
    178/*
    179 * Format handling
    180 */
    181
    182/**
    183 * enum pxa_mbus_packing - data packing types on the media-bus
    184 * @PXA_MBUS_PACKING_NONE:	no packing, bit-for-bit transfer to RAM, one
    185 *				sample represents one pixel
    186 * @PXA_MBUS_PACKING_2X8_PADHI:	16 bits transferred in 2 8-bit samples, in the
    187 *				possibly incomplete byte high bits are padding
    188 * @PXA_MBUS_PACKING_EXTEND16:	sample width (e.g., 10 bits) has to be extended
    189 *				to 16 bits
    190 */
    191enum pxa_mbus_packing {
    192	PXA_MBUS_PACKING_NONE,
    193	PXA_MBUS_PACKING_2X8_PADHI,
    194	PXA_MBUS_PACKING_EXTEND16,
    195};
    196
    197/**
    198 * enum pxa_mbus_order - sample order on the media bus
    199 * @PXA_MBUS_ORDER_LE:		least significant sample first
    200 * @PXA_MBUS_ORDER_BE:		most significant sample first
    201 */
    202enum pxa_mbus_order {
    203	PXA_MBUS_ORDER_LE,
    204	PXA_MBUS_ORDER_BE,
    205};
    206
    207/**
    208 * enum pxa_mbus_layout - planes layout in memory
    209 * @PXA_MBUS_LAYOUT_PACKED:		color components packed
    210 * @PXA_MBUS_LAYOUT_PLANAR_2Y_U_V:	YUV components stored in 3 planes (4:2:2)
    211 * @PXA_MBUS_LAYOUT_PLANAR_2Y_C:	YUV components stored in a luma and a
    212 *					chroma plane (C plane is half the size
    213 *					of Y plane)
    214 * @PXA_MBUS_LAYOUT_PLANAR_Y_C:		YUV components stored in a luma and a
    215 *					chroma plane (C plane is the same size
    216 *					as Y plane)
    217 */
    218enum pxa_mbus_layout {
    219	PXA_MBUS_LAYOUT_PACKED = 0,
    220	PXA_MBUS_LAYOUT_PLANAR_2Y_U_V,
    221	PXA_MBUS_LAYOUT_PLANAR_2Y_C,
    222	PXA_MBUS_LAYOUT_PLANAR_Y_C,
    223};
    224
    225/**
    226 * struct pxa_mbus_pixelfmt - Data format on the media bus
    227 * @name:		Name of the format
    228 * @fourcc:		Fourcc code, that will be obtained if the data is
    229 *			stored in memory in the following way:
    230 * @packing:		Type of sample-packing, that has to be used
    231 * @order:		Sample order when storing in memory
    232 * @layout:		Planes layout in memory
    233 * @bits_per_sample:	How many bits the bridge has to sample
    234 */
    235struct pxa_mbus_pixelfmt {
    236	const char		*name;
    237	u32			fourcc;
    238	enum pxa_mbus_packing	packing;
    239	enum pxa_mbus_order	order;
    240	enum pxa_mbus_layout	layout;
    241	u8			bits_per_sample;
    242};
    243
    244/**
    245 * struct pxa_mbus_lookup - Lookup FOURCC IDs by mediabus codes for pass-through
    246 * @code:	mediabus pixel-code
    247 * @fmt:	pixel format description
    248 */
    249struct pxa_mbus_lookup {
    250	u32	code;
    251	struct pxa_mbus_pixelfmt	fmt;
    252};
    253
    254static const struct pxa_mbus_lookup mbus_fmt[] = {
    255{
    256	.code = MEDIA_BUS_FMT_YUYV8_2X8,
    257	.fmt = {
    258		.fourcc			= V4L2_PIX_FMT_YUYV,
    259		.name			= "YUYV",
    260		.bits_per_sample	= 8,
    261		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    262		.order			= PXA_MBUS_ORDER_LE,
    263		.layout			= PXA_MBUS_LAYOUT_PACKED,
    264	},
    265}, {
    266	.code = MEDIA_BUS_FMT_YVYU8_2X8,
    267	.fmt = {
    268		.fourcc			= V4L2_PIX_FMT_YVYU,
    269		.name			= "YVYU",
    270		.bits_per_sample	= 8,
    271		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    272		.order			= PXA_MBUS_ORDER_LE,
    273		.layout			= PXA_MBUS_LAYOUT_PACKED,
    274	},
    275}, {
    276	.code = MEDIA_BUS_FMT_UYVY8_2X8,
    277	.fmt = {
    278		.fourcc			= V4L2_PIX_FMT_UYVY,
    279		.name			= "UYVY",
    280		.bits_per_sample	= 8,
    281		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    282		.order			= PXA_MBUS_ORDER_LE,
    283		.layout			= PXA_MBUS_LAYOUT_PACKED,
    284	},
    285}, {
    286	.code = MEDIA_BUS_FMT_VYUY8_2X8,
    287	.fmt = {
    288		.fourcc			= V4L2_PIX_FMT_VYUY,
    289		.name			= "VYUY",
    290		.bits_per_sample	= 8,
    291		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    292		.order			= PXA_MBUS_ORDER_LE,
    293		.layout			= PXA_MBUS_LAYOUT_PACKED,
    294	},
    295}, {
    296	.code = MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE,
    297	.fmt = {
    298		.fourcc			= V4L2_PIX_FMT_RGB555,
    299		.name			= "RGB555",
    300		.bits_per_sample	= 8,
    301		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    302		.order			= PXA_MBUS_ORDER_LE,
    303		.layout			= PXA_MBUS_LAYOUT_PACKED,
    304	},
    305}, {
    306	.code = MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE,
    307	.fmt = {
    308		.fourcc			= V4L2_PIX_FMT_RGB555X,
    309		.name			= "RGB555X",
    310		.bits_per_sample	= 8,
    311		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    312		.order			= PXA_MBUS_ORDER_BE,
    313		.layout			= PXA_MBUS_LAYOUT_PACKED,
    314	},
    315}, {
    316	.code = MEDIA_BUS_FMT_RGB565_2X8_LE,
    317	.fmt = {
    318		.fourcc			= V4L2_PIX_FMT_RGB565,
    319		.name			= "RGB565",
    320		.bits_per_sample	= 8,
    321		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    322		.order			= PXA_MBUS_ORDER_LE,
    323		.layout			= PXA_MBUS_LAYOUT_PACKED,
    324	},
    325}, {
    326	.code = MEDIA_BUS_FMT_RGB565_2X8_BE,
    327	.fmt = {
    328		.fourcc			= V4L2_PIX_FMT_RGB565X,
    329		.name			= "RGB565X",
    330		.bits_per_sample	= 8,
    331		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    332		.order			= PXA_MBUS_ORDER_BE,
    333		.layout			= PXA_MBUS_LAYOUT_PACKED,
    334	},
    335}, {
    336	.code = MEDIA_BUS_FMT_SBGGR8_1X8,
    337	.fmt = {
    338		.fourcc			= V4L2_PIX_FMT_SBGGR8,
    339		.name			= "Bayer 8 BGGR",
    340		.bits_per_sample	= 8,
    341		.packing		= PXA_MBUS_PACKING_NONE,
    342		.order			= PXA_MBUS_ORDER_LE,
    343		.layout			= PXA_MBUS_LAYOUT_PACKED,
    344	},
    345}, {
    346	.code = MEDIA_BUS_FMT_SGBRG8_1X8,
    347	.fmt = {
    348		.fourcc			= V4L2_PIX_FMT_SGBRG8,
    349		.name			= "Bayer 8 GBRG",
    350		.bits_per_sample	= 8,
    351		.packing		= PXA_MBUS_PACKING_NONE,
    352		.order			= PXA_MBUS_ORDER_LE,
    353		.layout			= PXA_MBUS_LAYOUT_PACKED,
    354	},
    355}, {
    356	.code = MEDIA_BUS_FMT_SGRBG8_1X8,
    357	.fmt = {
    358		.fourcc			= V4L2_PIX_FMT_SGRBG8,
    359		.name			= "Bayer 8 GRBG",
    360		.bits_per_sample	= 8,
    361		.packing		= PXA_MBUS_PACKING_NONE,
    362		.order			= PXA_MBUS_ORDER_LE,
    363		.layout			= PXA_MBUS_LAYOUT_PACKED,
    364	},
    365}, {
    366	.code = MEDIA_BUS_FMT_SRGGB8_1X8,
    367	.fmt = {
    368		.fourcc			= V4L2_PIX_FMT_SRGGB8,
    369		.name			= "Bayer 8 RGGB",
    370		.bits_per_sample	= 8,
    371		.packing		= PXA_MBUS_PACKING_NONE,
    372		.order			= PXA_MBUS_ORDER_LE,
    373		.layout			= PXA_MBUS_LAYOUT_PACKED,
    374	},
    375}, {
    376	.code = MEDIA_BUS_FMT_SBGGR10_1X10,
    377	.fmt = {
    378		.fourcc			= V4L2_PIX_FMT_SBGGR10,
    379		.name			= "Bayer 10 BGGR",
    380		.bits_per_sample	= 10,
    381		.packing		= PXA_MBUS_PACKING_EXTEND16,
    382		.order			= PXA_MBUS_ORDER_LE,
    383		.layout			= PXA_MBUS_LAYOUT_PACKED,
    384	},
    385}, {
    386	.code = MEDIA_BUS_FMT_Y8_1X8,
    387	.fmt = {
    388		.fourcc			= V4L2_PIX_FMT_GREY,
    389		.name			= "Grey",
    390		.bits_per_sample	= 8,
    391		.packing		= PXA_MBUS_PACKING_NONE,
    392		.order			= PXA_MBUS_ORDER_LE,
    393		.layout			= PXA_MBUS_LAYOUT_PACKED,
    394	},
    395}, {
    396	.code = MEDIA_BUS_FMT_Y10_1X10,
    397	.fmt = {
    398		.fourcc			= V4L2_PIX_FMT_Y10,
    399		.name			= "Grey 10bit",
    400		.bits_per_sample	= 10,
    401		.packing		= PXA_MBUS_PACKING_EXTEND16,
    402		.order			= PXA_MBUS_ORDER_LE,
    403		.layout			= PXA_MBUS_LAYOUT_PACKED,
    404	},
    405}, {
    406	.code = MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE,
    407	.fmt = {
    408		.fourcc			= V4L2_PIX_FMT_SBGGR10,
    409		.name			= "Bayer 10 BGGR",
    410		.bits_per_sample	= 8,
    411		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    412		.order			= PXA_MBUS_ORDER_LE,
    413		.layout			= PXA_MBUS_LAYOUT_PACKED,
    414	},
    415}, {
    416	.code = MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_BE,
    417	.fmt = {
    418		.fourcc			= V4L2_PIX_FMT_SBGGR10,
    419		.name			= "Bayer 10 BGGR",
    420		.bits_per_sample	= 8,
    421		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    422		.order			= PXA_MBUS_ORDER_BE,
    423		.layout			= PXA_MBUS_LAYOUT_PACKED,
    424	},
    425}, {
    426	.code = MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE,
    427	.fmt = {
    428		.fourcc			= V4L2_PIX_FMT_RGB444,
    429		.name			= "RGB444",
    430		.bits_per_sample	= 8,
    431		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
    432		.order			= PXA_MBUS_ORDER_BE,
    433		.layout			= PXA_MBUS_LAYOUT_PACKED,
    434	},
    435}, {
    436	.code = MEDIA_BUS_FMT_UYVY8_1X16,
    437	.fmt = {
    438		.fourcc			= V4L2_PIX_FMT_UYVY,
    439		.name			= "UYVY 16bit",
    440		.bits_per_sample	= 16,
    441		.packing		= PXA_MBUS_PACKING_EXTEND16,
    442		.order			= PXA_MBUS_ORDER_LE,
    443		.layout			= PXA_MBUS_LAYOUT_PACKED,
    444	},
    445}, {
    446	.code = MEDIA_BUS_FMT_VYUY8_1X16,
    447	.fmt = {
    448		.fourcc			= V4L2_PIX_FMT_VYUY,
    449		.name			= "VYUY 16bit",
    450		.bits_per_sample	= 16,
    451		.packing		= PXA_MBUS_PACKING_EXTEND16,
    452		.order			= PXA_MBUS_ORDER_LE,
    453		.layout			= PXA_MBUS_LAYOUT_PACKED,
    454	},
    455}, {
    456	.code = MEDIA_BUS_FMT_YUYV8_1X16,
    457	.fmt = {
    458		.fourcc			= V4L2_PIX_FMT_YUYV,
    459		.name			= "YUYV 16bit",
    460		.bits_per_sample	= 16,
    461		.packing		= PXA_MBUS_PACKING_EXTEND16,
    462		.order			= PXA_MBUS_ORDER_LE,
    463		.layout			= PXA_MBUS_LAYOUT_PACKED,
    464	},
    465}, {
    466	.code = MEDIA_BUS_FMT_YVYU8_1X16,
    467	.fmt = {
    468		.fourcc			= V4L2_PIX_FMT_YVYU,
    469		.name			= "YVYU 16bit",
    470		.bits_per_sample	= 16,
    471		.packing		= PXA_MBUS_PACKING_EXTEND16,
    472		.order			= PXA_MBUS_ORDER_LE,
    473		.layout			= PXA_MBUS_LAYOUT_PACKED,
    474	},
    475}, {
    476	.code = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8,
    477	.fmt = {
    478		.fourcc			= V4L2_PIX_FMT_SGRBG10DPCM8,
    479		.name			= "Bayer 10 BGGR DPCM 8",
    480		.bits_per_sample	= 8,
    481		.packing		= PXA_MBUS_PACKING_NONE,
    482		.order			= PXA_MBUS_ORDER_LE,
    483		.layout			= PXA_MBUS_LAYOUT_PACKED,
    484	},
    485}, {
    486	.code = MEDIA_BUS_FMT_SGBRG10_1X10,
    487	.fmt = {
    488		.fourcc			= V4L2_PIX_FMT_SGBRG10,
    489		.name			= "Bayer 10 GBRG",
    490		.bits_per_sample	= 10,
    491		.packing		= PXA_MBUS_PACKING_EXTEND16,
    492		.order			= PXA_MBUS_ORDER_LE,
    493		.layout			= PXA_MBUS_LAYOUT_PACKED,
    494	},
    495}, {
    496	.code = MEDIA_BUS_FMT_SGRBG10_1X10,
    497	.fmt = {
    498		.fourcc			= V4L2_PIX_FMT_SGRBG10,
    499		.name			= "Bayer 10 GRBG",
    500		.bits_per_sample	= 10,
    501		.packing		= PXA_MBUS_PACKING_EXTEND16,
    502		.order			= PXA_MBUS_ORDER_LE,
    503		.layout			= PXA_MBUS_LAYOUT_PACKED,
    504	},
    505}, {
    506	.code = MEDIA_BUS_FMT_SRGGB10_1X10,
    507	.fmt = {
    508		.fourcc			= V4L2_PIX_FMT_SRGGB10,
    509		.name			= "Bayer 10 RGGB",
    510		.bits_per_sample	= 10,
    511		.packing		= PXA_MBUS_PACKING_EXTEND16,
    512		.order			= PXA_MBUS_ORDER_LE,
    513		.layout			= PXA_MBUS_LAYOUT_PACKED,
    514	},
    515}, {
    516	.code = MEDIA_BUS_FMT_SBGGR12_1X12,
    517	.fmt = {
    518		.fourcc			= V4L2_PIX_FMT_SBGGR12,
    519		.name			= "Bayer 12 BGGR",
    520		.bits_per_sample	= 12,
    521		.packing		= PXA_MBUS_PACKING_EXTEND16,
    522		.order			= PXA_MBUS_ORDER_LE,
    523		.layout			= PXA_MBUS_LAYOUT_PACKED,
    524	},
    525}, {
    526	.code = MEDIA_BUS_FMT_SGBRG12_1X12,
    527	.fmt = {
    528		.fourcc			= V4L2_PIX_FMT_SGBRG12,
    529		.name			= "Bayer 12 GBRG",
    530		.bits_per_sample	= 12,
    531		.packing		= PXA_MBUS_PACKING_EXTEND16,
    532		.order			= PXA_MBUS_ORDER_LE,
    533		.layout			= PXA_MBUS_LAYOUT_PACKED,
    534	},
    535}, {
    536	.code = MEDIA_BUS_FMT_SGRBG12_1X12,
    537	.fmt = {
    538		.fourcc			= V4L2_PIX_FMT_SGRBG12,
    539		.name			= "Bayer 12 GRBG",
    540		.bits_per_sample	= 12,
    541		.packing		= PXA_MBUS_PACKING_EXTEND16,
    542		.order			= PXA_MBUS_ORDER_LE,
    543		.layout			= PXA_MBUS_LAYOUT_PACKED,
    544	},
    545}, {
    546	.code = MEDIA_BUS_FMT_SRGGB12_1X12,
    547	.fmt = {
    548		.fourcc			= V4L2_PIX_FMT_SRGGB12,
    549		.name			= "Bayer 12 RGGB",
    550		.bits_per_sample	= 12,
    551		.packing		= PXA_MBUS_PACKING_EXTEND16,
    552		.order			= PXA_MBUS_ORDER_LE,
    553		.layout			= PXA_MBUS_LAYOUT_PACKED,
    554	},
    555},
    556};
    557
    558static s32 pxa_mbus_bytes_per_line(u32 width, const struct pxa_mbus_pixelfmt *mf)
    559{
    560	if (mf->layout != PXA_MBUS_LAYOUT_PACKED)
    561		return width * mf->bits_per_sample / 8;
    562
    563	switch (mf->packing) {
    564	case PXA_MBUS_PACKING_NONE:
    565		return width * mf->bits_per_sample / 8;
    566	case PXA_MBUS_PACKING_2X8_PADHI:
    567	case PXA_MBUS_PACKING_EXTEND16:
    568		return width * 2;
    569	}
    570	return -EINVAL;
    571}
    572
    573static s32 pxa_mbus_image_size(const struct pxa_mbus_pixelfmt *mf,
    574			u32 bytes_per_line, u32 height)
    575{
    576	if (mf->layout == PXA_MBUS_LAYOUT_PACKED)
    577		return bytes_per_line * height;
    578
    579	switch (mf->packing) {
    580	case PXA_MBUS_PACKING_2X8_PADHI:
    581		return bytes_per_line * height * 2;
    582	default:
    583		return -EINVAL;
    584	}
    585}
    586
    587static const struct pxa_mbus_pixelfmt *pxa_mbus_find_fmtdesc(
    588	u32 code,
    589	const struct pxa_mbus_lookup *lookup,
    590	int n)
    591{
    592	int i;
    593
    594	for (i = 0; i < n; i++)
    595		if (lookup[i].code == code)
    596			return &lookup[i].fmt;
    597
    598	return NULL;
    599}
    600
    601static const struct pxa_mbus_pixelfmt *pxa_mbus_get_fmtdesc(
    602	u32 code)
    603{
    604	return pxa_mbus_find_fmtdesc(code, mbus_fmt, ARRAY_SIZE(mbus_fmt));
    605}
    606
    607/**
    608 * struct pxa_camera_format_xlate - match between host and sensor formats
    609 * @code: code of a sensor provided format
    610 * @host_fmt: host format after host translation from code
    611 *
    612 * Host and sensor translation structure. Used in table of host and sensor
    613 * formats matchings in pxa_camera_device. A host can override the generic list
    614 * generation by implementing get_formats(), and use it for format checks and
    615 * format setup.
    616 */
    617struct pxa_camera_format_xlate {
    618	u32 code;
    619	const struct pxa_mbus_pixelfmt *host_fmt;
    620};
    621
    622/*
    623 * Structures
    624 */
    625enum pxa_camera_active_dma {
    626	DMA_Y = 0x1,
    627	DMA_U = 0x2,
    628	DMA_V = 0x4,
    629};
    630
    631/* buffer for one video frame */
    632struct pxa_buffer {
    633	/* common v4l buffer stuff -- must be first */
    634	struct vb2_v4l2_buffer		vbuf;
    635	struct list_head		queue;
    636	u32	code;
    637	int				nb_planes;
    638	/* our descriptor lists for Y, U and V channels */
    639	struct dma_async_tx_descriptor	*descs[3];
    640	dma_cookie_t			cookie[3];
    641	struct scatterlist		*sg[3];
    642	int				sg_len[3];
    643	size_t				plane_sizes[3];
    644	int				inwork;
    645	enum pxa_camera_active_dma	active_dma;
    646};
    647
    648struct pxa_camera_dev {
    649	struct v4l2_device	v4l2_dev;
    650	struct video_device	vdev;
    651	struct v4l2_async_notifier notifier;
    652	struct vb2_queue	vb2_vq;
    653	struct v4l2_subdev	*sensor;
    654	struct pxa_camera_format_xlate *user_formats;
    655	const struct pxa_camera_format_xlate *current_fmt;
    656	struct v4l2_pix_format	current_pix;
    657
    658	/*
    659	 * PXA27x is only supposed to handle one camera on its Quick Capture
    660	 * interface. If anyone ever builds hardware to enable more than
    661	 * one camera, they will have to modify this driver too
    662	 */
    663	struct clk		*clk;
    664
    665	unsigned int		irq;
    666	void __iomem		*base;
    667
    668	int			channels;
    669	struct dma_chan		*dma_chans[3];
    670
    671	struct pxacamera_platform_data *pdata;
    672	struct resource		*res;
    673	unsigned long		platform_flags;
    674	unsigned long		ciclk;
    675	unsigned long		mclk;
    676	u32			mclk_divisor;
    677	u16			width_flags;	/* max 10 bits */
    678
    679	struct list_head	capture;
    680
    681	spinlock_t		lock;
    682	struct mutex		mlock;
    683	unsigned int		buf_sequence;
    684
    685	struct pxa_buffer	*active;
    686	struct tasklet_struct	task_eof;
    687
    688	u32			save_cicr[5];
    689};
    690
    691struct pxa_cam {
    692	unsigned long flags;
    693};
    694
    695static const char *pxa_cam_driver_description = "PXA_Camera";
    696
    697/*
    698 * Format translation functions
    699 */
    700static const struct pxa_camera_format_xlate
    701*pxa_mbus_xlate_by_fourcc(struct pxa_camera_format_xlate *user_formats,
    702			  unsigned int fourcc)
    703{
    704	unsigned int i;
    705
    706	for (i = 0; user_formats[i].code; i++)
    707		if (user_formats[i].host_fmt->fourcc == fourcc)
    708			return user_formats + i;
    709	return NULL;
    710}
    711
    712static struct pxa_camera_format_xlate *pxa_mbus_build_fmts_xlate(
    713	struct v4l2_device *v4l2_dev, struct v4l2_subdev *subdev,
    714	int (*get_formats)(struct v4l2_device *, unsigned int,
    715			   struct pxa_camera_format_xlate *xlate))
    716{
    717	unsigned int i, fmts = 0, raw_fmts = 0;
    718	int ret;
    719	struct v4l2_subdev_mbus_code_enum code = {
    720		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
    721	};
    722	struct pxa_camera_format_xlate *user_formats;
    723
    724	while (!v4l2_subdev_call(subdev, pad, enum_mbus_code, NULL, &code)) {
    725		raw_fmts++;
    726		code.index++;
    727	}
    728
    729	/*
    730	 * First pass - only count formats this host-sensor
    731	 * configuration can provide
    732	 */
    733	for (i = 0; i < raw_fmts; i++) {
    734		ret = get_formats(v4l2_dev, i, NULL);
    735		if (ret < 0)
    736			return ERR_PTR(ret);
    737		fmts += ret;
    738	}
    739
    740	if (!fmts)
    741		return ERR_PTR(-ENXIO);
    742
    743	user_formats = kcalloc(fmts + 1, sizeof(*user_formats), GFP_KERNEL);
    744	if (!user_formats)
    745		return ERR_PTR(-ENOMEM);
    746
    747	/* Second pass - actually fill data formats */
    748	fmts = 0;
    749	for (i = 0; i < raw_fmts; i++) {
    750		ret = get_formats(v4l2_dev, i, user_formats + fmts);
    751		if (ret < 0)
    752			goto egfmt;
    753		fmts += ret;
    754	}
    755	user_formats[fmts].code = 0;
    756
    757	return user_formats;
    758egfmt:
    759	kfree(user_formats);
    760	return ERR_PTR(ret);
    761}
    762
    763/*
    764 *  Videobuf operations
    765 */
    766static struct pxa_buffer *vb2_to_pxa_buffer(struct vb2_buffer *vb)
    767{
    768	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
    769
    770	return container_of(vbuf, struct pxa_buffer, vbuf);
    771}
    772
    773static struct device *pcdev_to_dev(struct pxa_camera_dev *pcdev)
    774{
    775	return pcdev->v4l2_dev.dev;
    776}
    777
    778static struct pxa_camera_dev *v4l2_dev_to_pcdev(struct v4l2_device *v4l2_dev)
    779{
    780	return container_of(v4l2_dev, struct pxa_camera_dev, v4l2_dev);
    781}
    782
    783static void pxa_camera_dma_irq(struct pxa_camera_dev *pcdev,
    784			       enum pxa_camera_active_dma act_dma);
    785
    786static void pxa_camera_dma_irq_y(void *data)
    787{
    788	struct pxa_camera_dev *pcdev = data;
    789
    790	pxa_camera_dma_irq(pcdev, DMA_Y);
    791}
    792
    793static void pxa_camera_dma_irq_u(void *data)
    794{
    795	struct pxa_camera_dev *pcdev = data;
    796
    797	pxa_camera_dma_irq(pcdev, DMA_U);
    798}
    799
    800static void pxa_camera_dma_irq_v(void *data)
    801{
    802	struct pxa_camera_dev *pcdev = data;
    803
    804	pxa_camera_dma_irq(pcdev, DMA_V);
    805}
    806
    807/**
    808 * pxa_init_dma_channel - init dma descriptors
    809 * @pcdev: pxa camera device
    810 * @buf: pxa camera buffer
    811 * @channel: dma channel (0 => 'Y', 1 => 'U', 2 => 'V')
    812 * @sg: dma scatter list
    813 * @sglen: dma scatter list length
    814 *
    815 * Prepares the pxa dma descriptors to transfer one camera channel.
    816 *
    817 * Returns 0 if success or -ENOMEM if no memory is available
    818 */
    819static int pxa_init_dma_channel(struct pxa_camera_dev *pcdev,
    820				struct pxa_buffer *buf, int channel,
    821				struct scatterlist *sg, int sglen)
    822{
    823	struct dma_chan *dma_chan = pcdev->dma_chans[channel];
    824	struct dma_async_tx_descriptor *tx;
    825
    826	tx = dmaengine_prep_slave_sg(dma_chan, sg, sglen, DMA_DEV_TO_MEM,
    827				     DMA_PREP_INTERRUPT | DMA_CTRL_REUSE);
    828	if (!tx) {
    829		dev_err(pcdev_to_dev(pcdev),
    830			"dmaengine_prep_slave_sg failed\n");
    831		goto fail;
    832	}
    833
    834	tx->callback_param = pcdev;
    835	switch (channel) {
    836	case 0:
    837		tx->callback = pxa_camera_dma_irq_y;
    838		break;
    839	case 1:
    840		tx->callback = pxa_camera_dma_irq_u;
    841		break;
    842	case 2:
    843		tx->callback = pxa_camera_dma_irq_v;
    844		break;
    845	}
    846
    847	buf->descs[channel] = tx;
    848	return 0;
    849fail:
    850	dev_dbg(pcdev_to_dev(pcdev),
    851		"%s (vb=%p) dma_tx=%p\n",
    852		__func__, buf, tx);
    853
    854	return -ENOMEM;
    855}
    856
    857static void pxa_videobuf_set_actdma(struct pxa_camera_dev *pcdev,
    858				    struct pxa_buffer *buf)
    859{
    860	buf->active_dma = DMA_Y;
    861	if (buf->nb_planes == 3)
    862		buf->active_dma |= DMA_U | DMA_V;
    863}
    864
    865/**
    866 * pxa_dma_start_channels - start DMA channel for active buffer
    867 * @pcdev: pxa camera device
    868 *
    869 * Initialize DMA channels to the beginning of the active video buffer, and
    870 * start these channels.
    871 */
    872static void pxa_dma_start_channels(struct pxa_camera_dev *pcdev)
    873{
    874	int i;
    875
    876	for (i = 0; i < pcdev->channels; i++) {
    877		dev_dbg(pcdev_to_dev(pcdev),
    878			"%s (channel=%d)\n", __func__, i);
    879		dma_async_issue_pending(pcdev->dma_chans[i]);
    880	}
    881}
    882
    883static void pxa_dma_stop_channels(struct pxa_camera_dev *pcdev)
    884{
    885	int i;
    886
    887	for (i = 0; i < pcdev->channels; i++) {
    888		dev_dbg(pcdev_to_dev(pcdev),
    889			"%s (channel=%d)\n", __func__, i);
    890		dmaengine_terminate_all(pcdev->dma_chans[i]);
    891	}
    892}
    893
    894static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev,
    895				 struct pxa_buffer *buf)
    896{
    897	int i;
    898
    899	for (i = 0; i < pcdev->channels; i++) {
    900		buf->cookie[i] = dmaengine_submit(buf->descs[i]);
    901		dev_dbg(pcdev_to_dev(pcdev),
    902			"%s (channel=%d) : submit vb=%p cookie=%d\n",
    903			__func__, i, buf, buf->descs[i]->cookie);
    904	}
    905}
    906
    907/**
    908 * pxa_camera_start_capture - start video capturing
    909 * @pcdev: camera device
    910 *
    911 * Launch capturing. DMA channels should not be active yet. They should get
    912 * activated at the end of frame interrupt, to capture only whole frames, and
    913 * never begin the capture of a partial frame.
    914 */
    915static void pxa_camera_start_capture(struct pxa_camera_dev *pcdev)
    916{
    917	unsigned long cicr0;
    918
    919	dev_dbg(pcdev_to_dev(pcdev), "%s\n", __func__);
    920	__raw_writel(__raw_readl(pcdev->base + CISR), pcdev->base + CISR);
    921	/* Enable End-Of-Frame Interrupt */
    922	cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_ENB;
    923	cicr0 &= ~CICR0_EOFM;
    924	__raw_writel(cicr0, pcdev->base + CICR0);
    925}
    926
    927static void pxa_camera_stop_capture(struct pxa_camera_dev *pcdev)
    928{
    929	unsigned long cicr0;
    930
    931	pxa_dma_stop_channels(pcdev);
    932
    933	cicr0 = __raw_readl(pcdev->base + CICR0) & ~CICR0_ENB;
    934	__raw_writel(cicr0, pcdev->base + CICR0);
    935
    936	pcdev->active = NULL;
    937	dev_dbg(pcdev_to_dev(pcdev), "%s\n", __func__);
    938}
    939
    940static void pxa_camera_wakeup(struct pxa_camera_dev *pcdev,
    941			      struct pxa_buffer *buf,
    942			      enum vb2_buffer_state state)
    943{
    944	struct vb2_buffer *vb = &buf->vbuf.vb2_buf;
    945	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
    946
    947	/* _init is used to debug races, see comment in pxa_camera_reqbufs() */
    948	list_del_init(&buf->queue);
    949	vb->timestamp = ktime_get_ns();
    950	vbuf->sequence = pcdev->buf_sequence++;
    951	vbuf->field = V4L2_FIELD_NONE;
    952	vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
    953	dev_dbg(pcdev_to_dev(pcdev), "%s dequeued buffer (buf=0x%p)\n",
    954		__func__, buf);
    955
    956	if (list_empty(&pcdev->capture)) {
    957		pxa_camera_stop_capture(pcdev);
    958		return;
    959	}
    960
    961	pcdev->active = list_entry(pcdev->capture.next,
    962				   struct pxa_buffer, queue);
    963}
    964
    965/**
    966 * pxa_camera_check_link_miss - check missed DMA linking
    967 * @pcdev: camera device
    968 * @last_submitted: an opaque DMA cookie for last submitted
    969 * @last_issued: an opaque DMA cookie for last issued
    970 *
    971 * The DMA chaining is done with DMA running. This means a tiny temporal window
    972 * remains, where a buffer is queued on the chain, while the chain is already
    973 * stopped. This means the tailed buffer would never be transferred by DMA.
    974 * This function restarts the capture for this corner case, where :
    975 *  - DADR() == DADDR_STOP
    976 *  - a videobuffer is queued on the pcdev->capture list
    977 *
    978 * Please check the "DMA hot chaining timeslice issue" in
    979 *   Documentation/driver-api/media/drivers/pxa_camera.rst
    980 *
    981 * Context: should only be called within the dma irq handler
    982 */
    983static void pxa_camera_check_link_miss(struct pxa_camera_dev *pcdev,
    984				       dma_cookie_t last_submitted,
    985				       dma_cookie_t last_issued)
    986{
    987	bool is_dma_stopped = last_submitted != last_issued;
    988
    989	dev_dbg(pcdev_to_dev(pcdev),
    990		"%s : top queued buffer=%p, is_dma_stopped=%d\n",
    991		__func__, pcdev->active, is_dma_stopped);
    992
    993	if (pcdev->active && is_dma_stopped)
    994		pxa_camera_start_capture(pcdev);
    995}
    996
    997static void pxa_camera_dma_irq(struct pxa_camera_dev *pcdev,
    998			       enum pxa_camera_active_dma act_dma)
    999{
   1000	struct pxa_buffer *buf, *last_buf;
   1001	unsigned long flags;
   1002	u32 camera_status, overrun;
   1003	int chan;
   1004	enum dma_status last_status;
   1005	dma_cookie_t last_issued;
   1006
   1007	spin_lock_irqsave(&pcdev->lock, flags);
   1008
   1009	camera_status = __raw_readl(pcdev->base + CISR);
   1010	dev_dbg(pcdev_to_dev(pcdev), "camera dma irq, cisr=0x%x dma=%d\n",
   1011		camera_status, act_dma);
   1012	overrun = CISR_IFO_0;
   1013	if (pcdev->channels == 3)
   1014		overrun |= CISR_IFO_1 | CISR_IFO_2;
   1015
   1016	/*
   1017	 * pcdev->active should not be NULL in DMA irq handler.
   1018	 *
   1019	 * But there is one corner case : if capture was stopped due to an
   1020	 * overrun of channel 1, and at that same channel 2 was completed.
   1021	 *
   1022	 * When handling the overrun in DMA irq for channel 1, we'll stop the
   1023	 * capture and restart it (and thus set pcdev->active to NULL). But the
   1024	 * DMA irq handler will already be pending for channel 2. So on entering
   1025	 * the DMA irq handler for channel 2 there will be no active buffer, yet
   1026	 * that is normal.
   1027	 */
   1028	if (!pcdev->active)
   1029		goto out;
   1030
   1031	buf = pcdev->active;
   1032	WARN_ON(buf->inwork || list_empty(&buf->queue));
   1033
   1034	/*
   1035	 * It's normal if the last frame creates an overrun, as there
   1036	 * are no more DMA descriptors to fetch from QCI fifos
   1037	 */
   1038	switch (act_dma) {
   1039	case DMA_U:
   1040		chan = 1;
   1041		break;
   1042	case DMA_V:
   1043		chan = 2;
   1044		break;
   1045	default:
   1046		chan = 0;
   1047		break;
   1048	}
   1049	last_buf = list_entry(pcdev->capture.prev,
   1050			      struct pxa_buffer, queue);
   1051	last_status = dma_async_is_tx_complete(pcdev->dma_chans[chan],
   1052					       last_buf->cookie[chan],
   1053					       NULL, &last_issued);
   1054	if (camera_status & overrun &&
   1055	    last_status != DMA_COMPLETE) {
   1056		dev_dbg(pcdev_to_dev(pcdev), "FIFO overrun! CISR: %x\n",
   1057			camera_status);
   1058		pxa_camera_stop_capture(pcdev);
   1059		list_for_each_entry(buf, &pcdev->capture, queue)
   1060			pxa_dma_add_tail_buf(pcdev, buf);
   1061		pxa_camera_start_capture(pcdev);
   1062		goto out;
   1063	}
   1064	buf->active_dma &= ~act_dma;
   1065	if (!buf->active_dma) {
   1066		pxa_camera_wakeup(pcdev, buf, VB2_BUF_STATE_DONE);
   1067		pxa_camera_check_link_miss(pcdev, last_buf->cookie[chan],
   1068					   last_issued);
   1069	}
   1070
   1071out:
   1072	spin_unlock_irqrestore(&pcdev->lock, flags);
   1073}
   1074
   1075static u32 mclk_get_divisor(struct platform_device *pdev,
   1076			    struct pxa_camera_dev *pcdev)
   1077{
   1078	unsigned long mclk = pcdev->mclk;
   1079	u32 div;
   1080	unsigned long lcdclk;
   1081
   1082	lcdclk = clk_get_rate(pcdev->clk);
   1083	pcdev->ciclk = lcdclk;
   1084
   1085	/* mclk <= ciclk / 4 (27.4.2) */
   1086	if (mclk > lcdclk / 4) {
   1087		mclk = lcdclk / 4;
   1088		dev_warn(&pdev->dev,
   1089			 "Limiting master clock to %lu\n", mclk);
   1090	}
   1091
   1092	/* We verify mclk != 0, so if anyone breaks it, here comes their Oops */
   1093	div = (lcdclk + 2 * mclk - 1) / (2 * mclk) - 1;
   1094
   1095	/* If we're not supplying MCLK, leave it at 0 */
   1096	if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN)
   1097		pcdev->mclk = lcdclk / (2 * (div + 1));
   1098
   1099	dev_dbg(&pdev->dev, "LCD clock %luHz, target freq %luHz, divisor %u\n",
   1100		lcdclk, mclk, div);
   1101
   1102	return div;
   1103}
   1104
   1105static void recalculate_fifo_timeout(struct pxa_camera_dev *pcdev,
   1106				     unsigned long pclk)
   1107{
   1108	/* We want a timeout > 1 pixel time, not ">=" */
   1109	u32 ciclk_per_pixel = pcdev->ciclk / pclk + 1;
   1110
   1111	__raw_writel(ciclk_per_pixel, pcdev->base + CITOR);
   1112}
   1113
   1114static void pxa_camera_activate(struct pxa_camera_dev *pcdev)
   1115{
   1116	u32 cicr4 = 0;
   1117
   1118	/* disable all interrupts */
   1119	__raw_writel(0x3ff, pcdev->base + CICR0);
   1120
   1121	if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN)
   1122		cicr4 |= CICR4_PCLK_EN;
   1123	if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN)
   1124		cicr4 |= CICR4_MCLK_EN;
   1125	if (pcdev->platform_flags & PXA_CAMERA_PCP)
   1126		cicr4 |= CICR4_PCP;
   1127	if (pcdev->platform_flags & PXA_CAMERA_HSP)
   1128		cicr4 |= CICR4_HSP;
   1129	if (pcdev->platform_flags & PXA_CAMERA_VSP)
   1130		cicr4 |= CICR4_VSP;
   1131
   1132	__raw_writel(pcdev->mclk_divisor | cicr4, pcdev->base + CICR4);
   1133
   1134	if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN)
   1135		/* Initialise the timeout under the assumption pclk = mclk */
   1136		recalculate_fifo_timeout(pcdev, pcdev->mclk);
   1137	else
   1138		/* "Safe default" - 13MHz */
   1139		recalculate_fifo_timeout(pcdev, 13000000);
   1140
   1141	clk_prepare_enable(pcdev->clk);
   1142}
   1143
   1144static void pxa_camera_deactivate(struct pxa_camera_dev *pcdev)
   1145{
   1146	clk_disable_unprepare(pcdev->clk);
   1147}
   1148
   1149static void pxa_camera_eof(struct tasklet_struct *t)
   1150{
   1151	struct pxa_camera_dev *pcdev = from_tasklet(pcdev, t, task_eof);
   1152	unsigned long cifr;
   1153	struct pxa_buffer *buf;
   1154
   1155	dev_dbg(pcdev_to_dev(pcdev),
   1156		"Camera interrupt status 0x%x\n",
   1157		__raw_readl(pcdev->base + CISR));
   1158
   1159	/* Reset the FIFOs */
   1160	cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F;
   1161	__raw_writel(cifr, pcdev->base + CIFR);
   1162
   1163	pcdev->active = list_first_entry(&pcdev->capture,
   1164					 struct pxa_buffer, queue);
   1165	buf = pcdev->active;
   1166	pxa_videobuf_set_actdma(pcdev, buf);
   1167
   1168	pxa_dma_start_channels(pcdev);
   1169}
   1170
   1171static irqreturn_t pxa_camera_irq(int irq, void *data)
   1172{
   1173	struct pxa_camera_dev *pcdev = data;
   1174	unsigned long status, cicr0;
   1175
   1176	status = __raw_readl(pcdev->base + CISR);
   1177	dev_dbg(pcdev_to_dev(pcdev),
   1178		"Camera interrupt status 0x%lx\n", status);
   1179
   1180	if (!status)
   1181		return IRQ_NONE;
   1182
   1183	__raw_writel(status, pcdev->base + CISR);
   1184
   1185	if (status & CISR_EOF) {
   1186		cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_EOFM;
   1187		__raw_writel(cicr0, pcdev->base + CICR0);
   1188		tasklet_schedule(&pcdev->task_eof);
   1189	}
   1190
   1191	return IRQ_HANDLED;
   1192}
   1193
   1194static void pxa_camera_setup_cicr(struct pxa_camera_dev *pcdev,
   1195				  unsigned long flags, __u32 pixfmt)
   1196{
   1197	unsigned long dw, bpp;
   1198	u32 cicr0, cicr1, cicr2, cicr3, cicr4 = 0, y_skip_top;
   1199	int ret = sensor_call(pcdev, sensor, g_skip_top_lines, &y_skip_top);
   1200
   1201	if (ret < 0)
   1202		y_skip_top = 0;
   1203
   1204	/*
   1205	 * Datawidth is now guaranteed to be equal to one of the three values.
   1206	 * We fix bit-per-pixel equal to data-width...
   1207	 */
   1208	switch (pcdev->current_fmt->host_fmt->bits_per_sample) {
   1209	case 10:
   1210		dw = 4;
   1211		bpp = 0x40;
   1212		break;
   1213	case 9:
   1214		dw = 3;
   1215		bpp = 0x20;
   1216		break;
   1217	default:
   1218		/*
   1219		 * Actually it can only be 8 now,
   1220		 * default is just to silence compiler warnings
   1221		 */
   1222	case 8:
   1223		dw = 2;
   1224		bpp = 0;
   1225	}
   1226
   1227	if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN)
   1228		cicr4 |= CICR4_PCLK_EN;
   1229	if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN)
   1230		cicr4 |= CICR4_MCLK_EN;
   1231	if (flags & V4L2_MBUS_PCLK_SAMPLE_FALLING)
   1232		cicr4 |= CICR4_PCP;
   1233	if (flags & V4L2_MBUS_HSYNC_ACTIVE_LOW)
   1234		cicr4 |= CICR4_HSP;
   1235	if (flags & V4L2_MBUS_VSYNC_ACTIVE_LOW)
   1236		cicr4 |= CICR4_VSP;
   1237
   1238	cicr0 = __raw_readl(pcdev->base + CICR0);
   1239	if (cicr0 & CICR0_ENB)
   1240		__raw_writel(cicr0 & ~CICR0_ENB, pcdev->base + CICR0);
   1241
   1242	cicr1 = CICR1_PPL_VAL(pcdev->current_pix.width - 1) | bpp | dw;
   1243
   1244	switch (pixfmt) {
   1245	case V4L2_PIX_FMT_YUV422P:
   1246		pcdev->channels = 3;
   1247		cicr1 |= CICR1_YCBCR_F;
   1248		/*
   1249		 * Normally, pxa bus wants as input UYVY format. We allow all
   1250		 * reorderings of the YUV422 format, as no processing is done,
   1251		 * and the YUV stream is just passed through without any
   1252		 * transformation. Note that UYVY is the only format that
   1253		 * should be used if pxa framebuffer Overlay2 is used.
   1254		 */
   1255		fallthrough;
   1256	case V4L2_PIX_FMT_UYVY:
   1257	case V4L2_PIX_FMT_VYUY:
   1258	case V4L2_PIX_FMT_YUYV:
   1259	case V4L2_PIX_FMT_YVYU:
   1260		cicr1 |= CICR1_COLOR_SP_VAL(2);
   1261		break;
   1262	case V4L2_PIX_FMT_RGB555:
   1263		cicr1 |= CICR1_RGB_BPP_VAL(1) | CICR1_RGBT_CONV_VAL(2) |
   1264			CICR1_TBIT | CICR1_COLOR_SP_VAL(1);
   1265		break;
   1266	case V4L2_PIX_FMT_RGB565:
   1267		cicr1 |= CICR1_COLOR_SP_VAL(1) | CICR1_RGB_BPP_VAL(2);
   1268		break;
   1269	}
   1270
   1271	cicr2 = 0;
   1272	cicr3 = CICR3_LPF_VAL(pcdev->current_pix.height - 1) |
   1273		CICR3_BFW_VAL(min((u32)255, y_skip_top));
   1274	cicr4 |= pcdev->mclk_divisor;
   1275
   1276	__raw_writel(cicr1, pcdev->base + CICR1);
   1277	__raw_writel(cicr2, pcdev->base + CICR2);
   1278	__raw_writel(cicr3, pcdev->base + CICR3);
   1279	__raw_writel(cicr4, pcdev->base + CICR4);
   1280
   1281	/* CIF interrupts are not used, only DMA */
   1282	cicr0 = (cicr0 & CICR0_ENB) | (pcdev->platform_flags & PXA_CAMERA_MASTER ?
   1283		CICR0_SIM_MP : (CICR0_SL_CAP_EN | CICR0_SIM_SP));
   1284	cicr0 |= CICR0_DMAEN | CICR0_IRQ_MASK;
   1285	__raw_writel(cicr0, pcdev->base + CICR0);
   1286}
   1287
   1288/*
   1289 * Videobuf2 section
   1290 */
   1291static void pxa_buffer_cleanup(struct pxa_buffer *buf)
   1292{
   1293	int i;
   1294
   1295	for (i = 0; i < 3 && buf->descs[i]; i++) {
   1296		dmaengine_desc_free(buf->descs[i]);
   1297		kfree(buf->sg[i]);
   1298		buf->descs[i] = NULL;
   1299		buf->sg[i] = NULL;
   1300		buf->sg_len[i] = 0;
   1301		buf->plane_sizes[i] = 0;
   1302	}
   1303	buf->nb_planes = 0;
   1304}
   1305
   1306static int pxa_buffer_init(struct pxa_camera_dev *pcdev,
   1307			   struct pxa_buffer *buf)
   1308{
   1309	struct vb2_buffer *vb = &buf->vbuf.vb2_buf;
   1310	struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0);
   1311	int nb_channels = pcdev->channels;
   1312	int i, ret = 0;
   1313	unsigned long size = vb2_plane_size(vb, 0);
   1314
   1315	switch (nb_channels) {
   1316	case 1:
   1317		buf->plane_sizes[0] = size;
   1318		break;
   1319	case 3:
   1320		buf->plane_sizes[0] = size / 2;
   1321		buf->plane_sizes[1] = size / 4;
   1322		buf->plane_sizes[2] = size / 4;
   1323		break;
   1324	default:
   1325		return -EINVAL;
   1326	}
   1327	buf->nb_planes = nb_channels;
   1328
   1329	ret = sg_split(sgt->sgl, sgt->nents, 0, nb_channels,
   1330		       buf->plane_sizes, buf->sg, buf->sg_len, GFP_KERNEL);
   1331	if (ret < 0) {
   1332		dev_err(pcdev_to_dev(pcdev),
   1333			"sg_split failed: %d\n", ret);
   1334		return ret;
   1335	}
   1336	for (i = 0; i < nb_channels; i++) {
   1337		ret = pxa_init_dma_channel(pcdev, buf, i,
   1338					   buf->sg[i], buf->sg_len[i]);
   1339		if (ret) {
   1340			pxa_buffer_cleanup(buf);
   1341			return ret;
   1342		}
   1343	}
   1344	INIT_LIST_HEAD(&buf->queue);
   1345
   1346	return ret;
   1347}
   1348
   1349static void pxac_vb2_cleanup(struct vb2_buffer *vb)
   1350{
   1351	struct pxa_buffer *buf = vb2_to_pxa_buffer(vb);
   1352	struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue);
   1353
   1354	dev_dbg(pcdev_to_dev(pcdev),
   1355		 "%s(vb=%p)\n", __func__, vb);
   1356	pxa_buffer_cleanup(buf);
   1357}
   1358
   1359static void pxac_vb2_queue(struct vb2_buffer *vb)
   1360{
   1361	struct pxa_buffer *buf = vb2_to_pxa_buffer(vb);
   1362	struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue);
   1363
   1364	dev_dbg(pcdev_to_dev(pcdev),
   1365		 "%s(vb=%p) nb_channels=%d size=%lu active=%p\n",
   1366		__func__, vb, pcdev->channels, vb2_get_plane_payload(vb, 0),
   1367		pcdev->active);
   1368
   1369	list_add_tail(&buf->queue, &pcdev->capture);
   1370
   1371	pxa_dma_add_tail_buf(pcdev, buf);
   1372}
   1373
   1374/*
   1375 * Please check the DMA prepared buffer structure in :
   1376 *   Documentation/driver-api/media/drivers/pxa_camera.rst
   1377 * Please check also in pxa_camera_check_link_miss() to understand why DMA chain
   1378 * modification while DMA chain is running will work anyway.
   1379 */
   1380static int pxac_vb2_prepare(struct vb2_buffer *vb)
   1381{
   1382	struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue);
   1383	struct pxa_buffer *buf = vb2_to_pxa_buffer(vb);
   1384	int ret = 0;
   1385#ifdef DEBUG
   1386	int i;
   1387#endif
   1388
   1389	switch (pcdev->channels) {
   1390	case 1:
   1391	case 3:
   1392		vb2_set_plane_payload(vb, 0, pcdev->current_pix.sizeimage);
   1393		break;
   1394	default:
   1395		return -EINVAL;
   1396	}
   1397
   1398	dev_dbg(pcdev_to_dev(pcdev),
   1399		 "%s (vb=%p) nb_channels=%d size=%lu\n",
   1400		__func__, vb, pcdev->channels, vb2_get_plane_payload(vb, 0));
   1401
   1402	WARN_ON(!pcdev->current_fmt);
   1403
   1404#ifdef DEBUG
   1405	/*
   1406	 * This can be useful if you want to see if we actually fill
   1407	 * the buffer with something
   1408	 */
   1409	for (i = 0; i < vb->num_planes; i++)
   1410		memset((void *)vb2_plane_vaddr(vb, i),
   1411		       0xaa, vb2_get_plane_payload(vb, i));
   1412#endif
   1413
   1414	/*
   1415	 * I think, in buf_prepare you only have to protect global data,
   1416	 * the actual buffer is yours
   1417	 */
   1418	buf->inwork = 0;
   1419	pxa_videobuf_set_actdma(pcdev, buf);
   1420
   1421	return ret;
   1422}
   1423
   1424static int pxac_vb2_init(struct vb2_buffer *vb)
   1425{
   1426	struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue);
   1427	struct pxa_buffer *buf = vb2_to_pxa_buffer(vb);
   1428
   1429	dev_dbg(pcdev_to_dev(pcdev),
   1430		 "%s(nb_channels=%d)\n",
   1431		__func__, pcdev->channels);
   1432
   1433	return pxa_buffer_init(pcdev, buf);
   1434}
   1435
   1436static int pxac_vb2_queue_setup(struct vb2_queue *vq,
   1437				unsigned int *nbufs,
   1438				unsigned int *num_planes, unsigned int sizes[],
   1439				struct device *alloc_devs[])
   1440{
   1441	struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vq);
   1442	int size = pcdev->current_pix.sizeimage;
   1443
   1444	dev_dbg(pcdev_to_dev(pcdev),
   1445		 "%s(vq=%p nbufs=%d num_planes=%d size=%d)\n",
   1446		__func__, vq, *nbufs, *num_planes, size);
   1447	/*
   1448	 * Called from VIDIOC_REQBUFS or in compatibility mode For YUV422P
   1449	 * format, even if there are 3 planes Y, U and V, we reply there is only
   1450	 * one plane, containing Y, U and V data, one after the other.
   1451	 */
   1452	if (*num_planes)
   1453		return sizes[0] < size ? -EINVAL : 0;
   1454
   1455	*num_planes = 1;
   1456	switch (pcdev->channels) {
   1457	case 1:
   1458	case 3:
   1459		sizes[0] = size;
   1460		break;
   1461	default:
   1462		return -EINVAL;
   1463	}
   1464
   1465	if (!*nbufs)
   1466		*nbufs = 1;
   1467
   1468	return 0;
   1469}
   1470
   1471static int pxac_vb2_start_streaming(struct vb2_queue *vq, unsigned int count)
   1472{
   1473	struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vq);
   1474
   1475	dev_dbg(pcdev_to_dev(pcdev), "%s(count=%d) active=%p\n",
   1476		__func__, count, pcdev->active);
   1477
   1478	pcdev->buf_sequence = 0;
   1479	if (!pcdev->active)
   1480		pxa_camera_start_capture(pcdev);
   1481
   1482	return 0;
   1483}
   1484
   1485static void pxac_vb2_stop_streaming(struct vb2_queue *vq)
   1486{
   1487	struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vq);
   1488	struct pxa_buffer *buf, *tmp;
   1489
   1490	dev_dbg(pcdev_to_dev(pcdev), "%s active=%p\n",
   1491		__func__, pcdev->active);
   1492	pxa_camera_stop_capture(pcdev);
   1493
   1494	list_for_each_entry_safe(buf, tmp, &pcdev->capture, queue)
   1495		pxa_camera_wakeup(pcdev, buf, VB2_BUF_STATE_ERROR);
   1496}
   1497
   1498static const struct vb2_ops pxac_vb2_ops = {
   1499	.queue_setup		= pxac_vb2_queue_setup,
   1500	.buf_init		= pxac_vb2_init,
   1501	.buf_prepare		= pxac_vb2_prepare,
   1502	.buf_queue		= pxac_vb2_queue,
   1503	.buf_cleanup		= pxac_vb2_cleanup,
   1504	.start_streaming	= pxac_vb2_start_streaming,
   1505	.stop_streaming		= pxac_vb2_stop_streaming,
   1506	.wait_prepare		= vb2_ops_wait_prepare,
   1507	.wait_finish		= vb2_ops_wait_finish,
   1508};
   1509
   1510static int pxa_camera_init_videobuf2(struct pxa_camera_dev *pcdev)
   1511{
   1512	int ret;
   1513	struct vb2_queue *vq = &pcdev->vb2_vq;
   1514
   1515	memset(vq, 0, sizeof(*vq));
   1516	vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
   1517	vq->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
   1518	vq->drv_priv = pcdev;
   1519	vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
   1520	vq->buf_struct_size = sizeof(struct pxa_buffer);
   1521	vq->dev = pcdev->v4l2_dev.dev;
   1522
   1523	vq->ops = &pxac_vb2_ops;
   1524	vq->mem_ops = &vb2_dma_sg_memops;
   1525	vq->lock = &pcdev->mlock;
   1526
   1527	ret = vb2_queue_init(vq);
   1528	dev_dbg(pcdev_to_dev(pcdev),
   1529		 "vb2_queue_init(vq=%p): %d\n", vq, ret);
   1530
   1531	return ret;
   1532}
   1533
   1534/*
   1535 * Video ioctls section
   1536 */
   1537static int pxa_camera_set_bus_param(struct pxa_camera_dev *pcdev)
   1538{
   1539	unsigned int bus_width = pcdev->current_fmt->host_fmt->bits_per_sample;
   1540	struct v4l2_mbus_config cfg = {.type = V4L2_MBUS_PARALLEL,};
   1541	u32 pixfmt = pcdev->current_fmt->host_fmt->fourcc;
   1542	int mbus_config;
   1543	int ret;
   1544
   1545	if (!((1 << (bus_width - 1)) & pcdev->width_flags)) {
   1546		dev_err(pcdev_to_dev(pcdev), "Unsupported bus width %u",
   1547			bus_width);
   1548		return -EINVAL;
   1549	}
   1550
   1551	pcdev->channels = 1;
   1552
   1553	/* Make choices, based on platform preferences */
   1554	mbus_config = 0;
   1555	if (pcdev->platform_flags & PXA_CAMERA_MASTER)
   1556		mbus_config |= V4L2_MBUS_MASTER;
   1557	else
   1558		mbus_config |= V4L2_MBUS_SLAVE;
   1559
   1560	if (pcdev->platform_flags & PXA_CAMERA_HSP)
   1561		mbus_config |= V4L2_MBUS_HSYNC_ACTIVE_HIGH;
   1562	else
   1563		mbus_config |= V4L2_MBUS_HSYNC_ACTIVE_LOW;
   1564
   1565	if (pcdev->platform_flags & PXA_CAMERA_VSP)
   1566		mbus_config |= V4L2_MBUS_VSYNC_ACTIVE_HIGH;
   1567	else
   1568		mbus_config |= V4L2_MBUS_VSYNC_ACTIVE_LOW;
   1569
   1570	if (pcdev->platform_flags & PXA_CAMERA_PCP)
   1571		mbus_config |= V4L2_MBUS_PCLK_SAMPLE_RISING;
   1572	else
   1573		mbus_config |= V4L2_MBUS_PCLK_SAMPLE_FALLING;
   1574	mbus_config |= V4L2_MBUS_DATA_ACTIVE_HIGH;
   1575
   1576	ret = sensor_call(pcdev, pad, get_mbus_config, 0, &cfg);
   1577	if (ret < 0 && ret != -ENOIOCTLCMD) {
   1578		dev_err(pcdev_to_dev(pcdev),
   1579			"Failed to call get_mbus_config: %d\n", ret);
   1580		return ret;
   1581	}
   1582
   1583	/*
   1584	 * If the media bus configuration of the sensor differs, make sure it
   1585	 * is supported by the platform.
   1586	 *
   1587	 * PXA does not support V4L2_MBUS_DATA_ACTIVE_LOW and the bus mastering
   1588	 * roles should match.
   1589	 */
   1590	if (cfg.bus.parallel.flags != mbus_config) {
   1591		unsigned int pxa_mbus_role = mbus_config & (V4L2_MBUS_MASTER |
   1592							    V4L2_MBUS_SLAVE);
   1593		unsigned int flags = cfg.bus.parallel.flags;
   1594
   1595		if (pxa_mbus_role != (flags & (V4L2_MBUS_MASTER |
   1596					       V4L2_MBUS_SLAVE))) {
   1597			dev_err(pcdev_to_dev(pcdev),
   1598				"Unsupported mbus configuration: bus mastering\n");
   1599			return -EINVAL;
   1600		}
   1601
   1602		if (flags & V4L2_MBUS_DATA_ACTIVE_LOW) {
   1603			dev_err(pcdev_to_dev(pcdev),
   1604				"Unsupported mbus configuration: DATA_ACTIVE_LOW\n");
   1605			return -EINVAL;
   1606		}
   1607	}
   1608
   1609	pxa_camera_setup_cicr(pcdev, cfg.bus.parallel.flags, pixfmt);
   1610
   1611	return 0;
   1612}
   1613
   1614static const struct pxa_mbus_pixelfmt pxa_camera_formats[] = {
   1615	{
   1616		.fourcc			= V4L2_PIX_FMT_YUV422P,
   1617		.name			= "Planar YUV422 16 bit",
   1618		.bits_per_sample	= 8,
   1619		.packing		= PXA_MBUS_PACKING_2X8_PADHI,
   1620		.order			= PXA_MBUS_ORDER_LE,
   1621		.layout			= PXA_MBUS_LAYOUT_PLANAR_2Y_U_V,
   1622	},
   1623};
   1624
   1625/* This will be corrected as we get more formats */
   1626static bool pxa_camera_packing_supported(const struct pxa_mbus_pixelfmt *fmt)
   1627{
   1628	return	fmt->packing == PXA_MBUS_PACKING_NONE ||
   1629		(fmt->bits_per_sample == 8 &&
   1630		 fmt->packing == PXA_MBUS_PACKING_2X8_PADHI) ||
   1631		(fmt->bits_per_sample > 8 &&
   1632		 fmt->packing == PXA_MBUS_PACKING_EXTEND16);
   1633}
   1634
   1635static int pxa_camera_get_formats(struct v4l2_device *v4l2_dev,
   1636				  unsigned int idx,
   1637				  struct pxa_camera_format_xlate *xlate)
   1638{
   1639	struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(v4l2_dev);
   1640	int formats = 0, ret;
   1641	struct v4l2_subdev_mbus_code_enum code = {
   1642		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
   1643		.index = idx,
   1644	};
   1645	const struct pxa_mbus_pixelfmt *fmt;
   1646
   1647	ret = sensor_call(pcdev, pad, enum_mbus_code, NULL, &code);
   1648	if (ret < 0)
   1649		/* No more formats */
   1650		return 0;
   1651
   1652	fmt = pxa_mbus_get_fmtdesc(code.code);
   1653	if (!fmt) {
   1654		dev_err(pcdev_to_dev(pcdev),
   1655			"Invalid format code #%u: %d\n", idx, code.code);
   1656		return 0;
   1657	}
   1658
   1659	switch (code.code) {
   1660	case MEDIA_BUS_FMT_UYVY8_2X8:
   1661		formats++;
   1662		if (xlate) {
   1663			xlate->host_fmt	= &pxa_camera_formats[0];
   1664			xlate->code	= code.code;
   1665			xlate++;
   1666			dev_dbg(pcdev_to_dev(pcdev),
   1667				"Providing format %s using code %d\n",
   1668				pxa_camera_formats[0].name, code.code);
   1669		}
   1670		fallthrough;
   1671	case MEDIA_BUS_FMT_VYUY8_2X8:
   1672	case MEDIA_BUS_FMT_YUYV8_2X8:
   1673	case MEDIA_BUS_FMT_YVYU8_2X8:
   1674	case MEDIA_BUS_FMT_RGB565_2X8_LE:
   1675	case MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE:
   1676		if (xlate)
   1677			dev_dbg(pcdev_to_dev(pcdev),
   1678				"Providing format %s packed\n",
   1679				fmt->name);
   1680		break;
   1681	default:
   1682		if (!pxa_camera_packing_supported(fmt))
   1683			return 0;
   1684		if (xlate)
   1685			dev_dbg(pcdev_to_dev(pcdev),
   1686				"Providing format %s in pass-through mode\n",
   1687				fmt->name);
   1688		break;
   1689	}
   1690
   1691	/* Generic pass-through */
   1692	formats++;
   1693	if (xlate) {
   1694		xlate->host_fmt	= fmt;
   1695		xlate->code	= code.code;
   1696		xlate++;
   1697	}
   1698
   1699	return formats;
   1700}
   1701
   1702static int pxa_camera_build_formats(struct pxa_camera_dev *pcdev)
   1703{
   1704	struct pxa_camera_format_xlate *xlate;
   1705
   1706	xlate = pxa_mbus_build_fmts_xlate(&pcdev->v4l2_dev, pcdev->sensor,
   1707					  pxa_camera_get_formats);
   1708	if (IS_ERR(xlate))
   1709		return PTR_ERR(xlate);
   1710
   1711	pcdev->user_formats = xlate;
   1712	return 0;
   1713}
   1714
   1715static void pxa_camera_destroy_formats(struct pxa_camera_dev *pcdev)
   1716{
   1717	kfree(pcdev->user_formats);
   1718}
   1719
   1720static int pxa_camera_check_frame(u32 width, u32 height)
   1721{
   1722	/* limit to pxa hardware capabilities */
   1723	return height < 32 || height > 2048 || width < 48 || width > 2048 ||
   1724		(width & 0x01);
   1725}
   1726
   1727#ifdef CONFIG_VIDEO_ADV_DEBUG
   1728static int pxac_vidioc_g_register(struct file *file, void *priv,
   1729				  struct v4l2_dbg_register *reg)
   1730{
   1731	struct pxa_camera_dev *pcdev = video_drvdata(file);
   1732
   1733	if (reg->reg > CIBR2)
   1734		return -ERANGE;
   1735
   1736	reg->val = __raw_readl(pcdev->base + reg->reg);
   1737	reg->size = sizeof(__u32);
   1738	return 0;
   1739}
   1740
   1741static int pxac_vidioc_s_register(struct file *file, void *priv,
   1742				  const struct v4l2_dbg_register *reg)
   1743{
   1744	struct pxa_camera_dev *pcdev = video_drvdata(file);
   1745
   1746	if (reg->reg > CIBR2)
   1747		return -ERANGE;
   1748	if (reg->size != sizeof(__u32))
   1749		return -EINVAL;
   1750	__raw_writel(reg->val, pcdev->base + reg->reg);
   1751	return 0;
   1752}
   1753#endif
   1754
   1755static int pxac_vidioc_enum_fmt_vid_cap(struct file *filp, void  *priv,
   1756					struct v4l2_fmtdesc *f)
   1757{
   1758	struct pxa_camera_dev *pcdev = video_drvdata(filp);
   1759	const struct pxa_mbus_pixelfmt *format;
   1760	unsigned int idx;
   1761
   1762	for (idx = 0; pcdev->user_formats[idx].code; idx++);
   1763	if (f->index >= idx)
   1764		return -EINVAL;
   1765
   1766	format = pcdev->user_formats[f->index].host_fmt;
   1767	f->pixelformat = format->fourcc;
   1768	return 0;
   1769}
   1770
   1771static int pxac_vidioc_g_fmt_vid_cap(struct file *filp, void *priv,
   1772				    struct v4l2_format *f)
   1773{
   1774	struct pxa_camera_dev *pcdev = video_drvdata(filp);
   1775	struct v4l2_pix_format *pix = &f->fmt.pix;
   1776
   1777	pix->width		= pcdev->current_pix.width;
   1778	pix->height		= pcdev->current_pix.height;
   1779	pix->bytesperline	= pcdev->current_pix.bytesperline;
   1780	pix->sizeimage		= pcdev->current_pix.sizeimage;
   1781	pix->field		= pcdev->current_pix.field;
   1782	pix->pixelformat	= pcdev->current_fmt->host_fmt->fourcc;
   1783	pix->colorspace		= pcdev->current_pix.colorspace;
   1784	dev_dbg(pcdev_to_dev(pcdev), "current_fmt->fourcc: 0x%08x\n",
   1785		pcdev->current_fmt->host_fmt->fourcc);
   1786	return 0;
   1787}
   1788
   1789static int pxac_vidioc_try_fmt_vid_cap(struct file *filp, void *priv,
   1790				      struct v4l2_format *f)
   1791{
   1792	struct pxa_camera_dev *pcdev = video_drvdata(filp);
   1793	const struct pxa_camera_format_xlate *xlate;
   1794	struct v4l2_pix_format *pix = &f->fmt.pix;
   1795	struct v4l2_subdev_pad_config pad_cfg;
   1796	struct v4l2_subdev_state pad_state = {
   1797		.pads = &pad_cfg
   1798		};
   1799	struct v4l2_subdev_format format = {
   1800		.which = V4L2_SUBDEV_FORMAT_TRY,
   1801	};
   1802	struct v4l2_mbus_framefmt *mf = &format.format;
   1803	__u32 pixfmt = pix->pixelformat;
   1804	int ret;
   1805
   1806	xlate = pxa_mbus_xlate_by_fourcc(pcdev->user_formats, pixfmt);
   1807	if (!xlate) {
   1808		dev_warn(pcdev_to_dev(pcdev), "Format %x not found\n", pixfmt);
   1809		return -EINVAL;
   1810	}
   1811
   1812	/*
   1813	 * Limit to pxa hardware capabilities.  YUV422P planar format requires
   1814	 * images size to be a multiple of 16 bytes.  If not, zeros will be
   1815	 * inserted between Y and U planes, and U and V planes, which violates
   1816	 * the YUV422P standard.
   1817	 */
   1818	v4l_bound_align_image(&pix->width, 48, 2048, 1,
   1819			      &pix->height, 32, 2048, 0,
   1820			      pixfmt == V4L2_PIX_FMT_YUV422P ? 4 : 0);
   1821
   1822	v4l2_fill_mbus_format(mf, pix, xlate->code);
   1823	ret = sensor_call(pcdev, pad, set_fmt, &pad_state, &format);
   1824	if (ret < 0)
   1825		return ret;
   1826
   1827	v4l2_fill_pix_format(pix, mf);
   1828
   1829	/* Only progressive video supported so far */
   1830	switch (mf->field) {
   1831	case V4L2_FIELD_ANY:
   1832	case V4L2_FIELD_NONE:
   1833		pix->field = V4L2_FIELD_NONE;
   1834		break;
   1835	default:
   1836		/* TODO: support interlaced at least in pass-through mode */
   1837		dev_err(pcdev_to_dev(pcdev), "Field type %d unsupported.\n",
   1838			mf->field);
   1839		return -EINVAL;
   1840	}
   1841
   1842	ret = pxa_mbus_bytes_per_line(pix->width, xlate->host_fmt);
   1843	if (ret < 0)
   1844		return ret;
   1845
   1846	pix->bytesperline = ret;
   1847	ret = pxa_mbus_image_size(xlate->host_fmt, pix->bytesperline,
   1848				  pix->height);
   1849	if (ret < 0)
   1850		return ret;
   1851
   1852	pix->sizeimage = ret;
   1853	return 0;
   1854}
   1855
   1856static int pxac_vidioc_s_fmt_vid_cap(struct file *filp, void *priv,
   1857				    struct v4l2_format *f)
   1858{
   1859	struct pxa_camera_dev *pcdev = video_drvdata(filp);
   1860	const struct pxa_camera_format_xlate *xlate;
   1861	struct v4l2_pix_format *pix = &f->fmt.pix;
   1862	struct v4l2_subdev_format format = {
   1863		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
   1864	};
   1865	unsigned long flags;
   1866	int ret, is_busy;
   1867
   1868	dev_dbg(pcdev_to_dev(pcdev),
   1869		"s_fmt_vid_cap(pix=%dx%d:%x)\n",
   1870		pix->width, pix->height, pix->pixelformat);
   1871
   1872	spin_lock_irqsave(&pcdev->lock, flags);
   1873	is_busy = pcdev->active || vb2_is_busy(&pcdev->vb2_vq);
   1874	spin_unlock_irqrestore(&pcdev->lock, flags);
   1875
   1876	if (is_busy)
   1877		return -EBUSY;
   1878
   1879	ret = pxac_vidioc_try_fmt_vid_cap(filp, priv, f);
   1880	if (ret)
   1881		return ret;
   1882
   1883	xlate = pxa_mbus_xlate_by_fourcc(pcdev->user_formats,
   1884					 pix->pixelformat);
   1885	v4l2_fill_mbus_format(&format.format, pix, xlate->code);
   1886	ret = sensor_call(pcdev, pad, set_fmt, NULL, &format);
   1887	if (ret < 0) {
   1888		dev_warn(pcdev_to_dev(pcdev),
   1889			 "Failed to configure for format %x\n",
   1890			 pix->pixelformat);
   1891	} else if (pxa_camera_check_frame(pix->width, pix->height)) {
   1892		dev_warn(pcdev_to_dev(pcdev),
   1893			 "Camera driver produced an unsupported frame %dx%d\n",
   1894			 pix->width, pix->height);
   1895		return -EINVAL;
   1896	}
   1897
   1898	pcdev->current_fmt = xlate;
   1899	pcdev->current_pix = *pix;
   1900
   1901	ret = pxa_camera_set_bus_param(pcdev);
   1902	return ret;
   1903}
   1904
   1905static int pxac_vidioc_querycap(struct file *file, void *priv,
   1906				struct v4l2_capability *cap)
   1907{
   1908	strscpy(cap->bus_info, "platform:pxa-camera", sizeof(cap->bus_info));
   1909	strscpy(cap->driver, PXA_CAM_DRV_NAME, sizeof(cap->driver));
   1910	strscpy(cap->card, pxa_cam_driver_description, sizeof(cap->card));
   1911	return 0;
   1912}
   1913
   1914static int pxac_vidioc_enum_input(struct file *file, void *priv,
   1915				  struct v4l2_input *i)
   1916{
   1917	if (i->index > 0)
   1918		return -EINVAL;
   1919
   1920	i->type = V4L2_INPUT_TYPE_CAMERA;
   1921	strscpy(i->name, "Camera", sizeof(i->name));
   1922
   1923	return 0;
   1924}
   1925
   1926static int pxac_vidioc_g_input(struct file *file, void *priv, unsigned int *i)
   1927{
   1928	*i = 0;
   1929
   1930	return 0;
   1931}
   1932
   1933static int pxac_vidioc_s_input(struct file *file, void *priv, unsigned int i)
   1934{
   1935	if (i > 0)
   1936		return -EINVAL;
   1937
   1938	return 0;
   1939}
   1940
   1941static int pxac_sensor_set_power(struct pxa_camera_dev *pcdev, int on)
   1942{
   1943	int ret;
   1944
   1945	ret = sensor_call(pcdev, core, s_power, on);
   1946	if (ret == -ENOIOCTLCMD)
   1947		ret = 0;
   1948	if (ret) {
   1949		dev_warn(pcdev_to_dev(pcdev),
   1950			 "Failed to put subdevice in %s mode: %d\n",
   1951			 on ? "normal operation" : "power saving", ret);
   1952	}
   1953
   1954	return ret;
   1955}
   1956
   1957static int pxac_fops_camera_open(struct file *filp)
   1958{
   1959	struct pxa_camera_dev *pcdev = video_drvdata(filp);
   1960	int ret;
   1961
   1962	mutex_lock(&pcdev->mlock);
   1963	ret = v4l2_fh_open(filp);
   1964	if (ret < 0)
   1965		goto out;
   1966
   1967	if (!v4l2_fh_is_singular_file(filp))
   1968		goto out;
   1969
   1970	ret = pxac_sensor_set_power(pcdev, 1);
   1971	if (ret)
   1972		v4l2_fh_release(filp);
   1973out:
   1974	mutex_unlock(&pcdev->mlock);
   1975	return ret;
   1976}
   1977
   1978static int pxac_fops_camera_release(struct file *filp)
   1979{
   1980	struct pxa_camera_dev *pcdev = video_drvdata(filp);
   1981	int ret;
   1982	bool fh_singular;
   1983
   1984	mutex_lock(&pcdev->mlock);
   1985
   1986	fh_singular = v4l2_fh_is_singular_file(filp);
   1987
   1988	ret = _vb2_fop_release(filp, NULL);
   1989
   1990	if (fh_singular)
   1991		ret = pxac_sensor_set_power(pcdev, 0);
   1992
   1993	mutex_unlock(&pcdev->mlock);
   1994
   1995	return ret;
   1996}
   1997
   1998static const struct v4l2_file_operations pxa_camera_fops = {
   1999	.owner		= THIS_MODULE,
   2000	.open		= pxac_fops_camera_open,
   2001	.release	= pxac_fops_camera_release,
   2002	.read		= vb2_fop_read,
   2003	.poll		= vb2_fop_poll,
   2004	.mmap		= vb2_fop_mmap,
   2005	.unlocked_ioctl = video_ioctl2,
   2006};
   2007
   2008static const struct v4l2_ioctl_ops pxa_camera_ioctl_ops = {
   2009	.vidioc_querycap		= pxac_vidioc_querycap,
   2010
   2011	.vidioc_enum_input		= pxac_vidioc_enum_input,
   2012	.vidioc_g_input			= pxac_vidioc_g_input,
   2013	.vidioc_s_input			= pxac_vidioc_s_input,
   2014
   2015	.vidioc_enum_fmt_vid_cap	= pxac_vidioc_enum_fmt_vid_cap,
   2016	.vidioc_g_fmt_vid_cap		= pxac_vidioc_g_fmt_vid_cap,
   2017	.vidioc_s_fmt_vid_cap		= pxac_vidioc_s_fmt_vid_cap,
   2018	.vidioc_try_fmt_vid_cap		= pxac_vidioc_try_fmt_vid_cap,
   2019
   2020	.vidioc_reqbufs			= vb2_ioctl_reqbufs,
   2021	.vidioc_create_bufs		= vb2_ioctl_create_bufs,
   2022	.vidioc_querybuf		= vb2_ioctl_querybuf,
   2023	.vidioc_qbuf			= vb2_ioctl_qbuf,
   2024	.vidioc_dqbuf			= vb2_ioctl_dqbuf,
   2025	.vidioc_expbuf			= vb2_ioctl_expbuf,
   2026	.vidioc_streamon		= vb2_ioctl_streamon,
   2027	.vidioc_streamoff		= vb2_ioctl_streamoff,
   2028#ifdef CONFIG_VIDEO_ADV_DEBUG
   2029	.vidioc_g_register		= pxac_vidioc_g_register,
   2030	.vidioc_s_register		= pxac_vidioc_s_register,
   2031#endif
   2032	.vidioc_subscribe_event		= v4l2_ctrl_subscribe_event,
   2033	.vidioc_unsubscribe_event	= v4l2_event_unsubscribe,
   2034};
   2035
   2036static const struct video_device pxa_camera_videodev_template = {
   2037	.name = "pxa-camera",
   2038	.minor = -1,
   2039	.fops = &pxa_camera_fops,
   2040	.ioctl_ops = &pxa_camera_ioctl_ops,
   2041	.release = video_device_release_empty,
   2042	.device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING,
   2043};
   2044
   2045static int pxa_camera_sensor_bound(struct v4l2_async_notifier *notifier,
   2046		     struct v4l2_subdev *subdev,
   2047		     struct v4l2_async_subdev *asd)
   2048{
   2049	int err;
   2050	struct v4l2_device *v4l2_dev = notifier->v4l2_dev;
   2051	struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(v4l2_dev);
   2052	struct video_device *vdev = &pcdev->vdev;
   2053	struct v4l2_pix_format *pix = &pcdev->current_pix;
   2054	struct v4l2_subdev_format format = {
   2055		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
   2056	};
   2057	struct v4l2_mbus_framefmt *mf = &format.format;
   2058
   2059	dev_info(pcdev_to_dev(pcdev), "%s(): trying to bind a device\n",
   2060		 __func__);
   2061	mutex_lock(&pcdev->mlock);
   2062	*vdev = pxa_camera_videodev_template;
   2063	vdev->v4l2_dev = v4l2_dev;
   2064	vdev->lock = &pcdev->mlock;
   2065	pcdev->sensor = subdev;
   2066	pcdev->vdev.queue = &pcdev->vb2_vq;
   2067	pcdev->vdev.v4l2_dev = &pcdev->v4l2_dev;
   2068	pcdev->vdev.ctrl_handler = subdev->ctrl_handler;
   2069	video_set_drvdata(&pcdev->vdev, pcdev);
   2070
   2071	err = pxa_camera_build_formats(pcdev);
   2072	if (err) {
   2073		dev_err(pcdev_to_dev(pcdev), "building formats failed: %d\n",
   2074			err);
   2075		goto out;
   2076	}
   2077
   2078	pcdev->current_fmt = pcdev->user_formats;
   2079	pix->field = V4L2_FIELD_NONE;
   2080	pix->width = DEFAULT_WIDTH;
   2081	pix->height = DEFAULT_HEIGHT;
   2082	pix->bytesperline =
   2083		pxa_mbus_bytes_per_line(pix->width,
   2084					pcdev->current_fmt->host_fmt);
   2085	pix->sizeimage =
   2086		pxa_mbus_image_size(pcdev->current_fmt->host_fmt,
   2087				    pix->bytesperline, pix->height);
   2088	pix->pixelformat = pcdev->current_fmt->host_fmt->fourcc;
   2089	v4l2_fill_mbus_format(mf, pix, pcdev->current_fmt->code);
   2090
   2091	err = pxac_sensor_set_power(pcdev, 1);
   2092	if (err)
   2093		goto out;
   2094
   2095	err = sensor_call(pcdev, pad, set_fmt, NULL, &format);
   2096	if (err)
   2097		goto out_sensor_poweroff;
   2098
   2099	v4l2_fill_pix_format(pix, mf);
   2100	pr_info("%s(): colorspace=0x%x pixfmt=0x%x\n",
   2101		__func__, pix->colorspace, pix->pixelformat);
   2102
   2103	err = pxa_camera_init_videobuf2(pcdev);
   2104	if (err)
   2105		goto out_sensor_poweroff;
   2106
   2107	err = video_register_device(&pcdev->vdev, VFL_TYPE_VIDEO, -1);
   2108	if (err) {
   2109		v4l2_err(v4l2_dev, "register video device failed: %d\n", err);
   2110		pcdev->sensor = NULL;
   2111	} else {
   2112		dev_info(pcdev_to_dev(pcdev),
   2113			 "PXA Camera driver attached to camera %s\n",
   2114			 subdev->name);
   2115	}
   2116
   2117out_sensor_poweroff:
   2118	err = pxac_sensor_set_power(pcdev, 0);
   2119out:
   2120	mutex_unlock(&pcdev->mlock);
   2121	return err;
   2122}
   2123
   2124static void pxa_camera_sensor_unbind(struct v4l2_async_notifier *notifier,
   2125		     struct v4l2_subdev *subdev,
   2126		     struct v4l2_async_subdev *asd)
   2127{
   2128	struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(notifier->v4l2_dev);
   2129
   2130	mutex_lock(&pcdev->mlock);
   2131	dev_info(pcdev_to_dev(pcdev),
   2132		 "PXA Camera driver detached from camera %s\n",
   2133		 subdev->name);
   2134
   2135	/* disable capture, disable interrupts */
   2136	__raw_writel(0x3ff, pcdev->base + CICR0);
   2137
   2138	/* Stop DMA engine */
   2139	pxa_dma_stop_channels(pcdev);
   2140
   2141	pxa_camera_destroy_formats(pcdev);
   2142
   2143	video_unregister_device(&pcdev->vdev);
   2144	pcdev->sensor = NULL;
   2145
   2146	mutex_unlock(&pcdev->mlock);
   2147}
   2148
   2149static const struct v4l2_async_notifier_operations pxa_camera_sensor_ops = {
   2150	.bound = pxa_camera_sensor_bound,
   2151	.unbind = pxa_camera_sensor_unbind,
   2152};
   2153
   2154/*
   2155 * Driver probe, remove, suspend and resume operations
   2156 */
   2157static int pxa_camera_suspend(struct device *dev)
   2158{
   2159	struct pxa_camera_dev *pcdev = dev_get_drvdata(dev);
   2160	int i = 0, ret = 0;
   2161
   2162	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR0);
   2163	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR1);
   2164	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR2);
   2165	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR3);
   2166	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR4);
   2167
   2168	if (pcdev->sensor)
   2169		ret = pxac_sensor_set_power(pcdev, 0);
   2170
   2171	return ret;
   2172}
   2173
   2174static int pxa_camera_resume(struct device *dev)
   2175{
   2176	struct pxa_camera_dev *pcdev = dev_get_drvdata(dev);
   2177	int i = 0, ret = 0;
   2178
   2179	__raw_writel(pcdev->save_cicr[i++] & ~CICR0_ENB, pcdev->base + CICR0);
   2180	__raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR1);
   2181	__raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR2);
   2182	__raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR3);
   2183	__raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR4);
   2184
   2185	if (pcdev->sensor) {
   2186		ret = pxac_sensor_set_power(pcdev, 1);
   2187	}
   2188
   2189	/* Restart frame capture if active buffer exists */
   2190	if (!ret && pcdev->active)
   2191		pxa_camera_start_capture(pcdev);
   2192
   2193	return ret;
   2194}
   2195
   2196static int pxa_camera_pdata_from_dt(struct device *dev,
   2197				    struct pxa_camera_dev *pcdev)
   2198{
   2199	u32 mclk_rate;
   2200	struct v4l2_async_subdev *asd;
   2201	struct device_node *np = dev->of_node;
   2202	struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
   2203	int err = of_property_read_u32(np, "clock-frequency",
   2204				       &mclk_rate);
   2205	if (!err) {
   2206		pcdev->platform_flags |= PXA_CAMERA_MCLK_EN;
   2207		pcdev->mclk = mclk_rate;
   2208	}
   2209
   2210	np = of_graph_get_next_endpoint(np, NULL);
   2211	if (!np) {
   2212		dev_err(dev, "could not find endpoint\n");
   2213		return -EINVAL;
   2214	}
   2215
   2216	err = v4l2_fwnode_endpoint_parse(of_fwnode_handle(np), &ep);
   2217	if (err) {
   2218		dev_err(dev, "could not parse endpoint\n");
   2219		goto out;
   2220	}
   2221
   2222	switch (ep.bus.parallel.bus_width) {
   2223	case 4:
   2224		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_4;
   2225		break;
   2226	case 5:
   2227		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_5;
   2228		break;
   2229	case 8:
   2230		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_8;
   2231		break;
   2232	case 9:
   2233		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_9;
   2234		break;
   2235	case 10:
   2236		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_10;
   2237		break;
   2238	default:
   2239		break;
   2240	}
   2241
   2242	if (ep.bus.parallel.flags & V4L2_MBUS_MASTER)
   2243		pcdev->platform_flags |= PXA_CAMERA_MASTER;
   2244	if (ep.bus.parallel.flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH)
   2245		pcdev->platform_flags |= PXA_CAMERA_HSP;
   2246	if (ep.bus.parallel.flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH)
   2247		pcdev->platform_flags |= PXA_CAMERA_VSP;
   2248	if (ep.bus.parallel.flags & V4L2_MBUS_PCLK_SAMPLE_RISING)
   2249		pcdev->platform_flags |= PXA_CAMERA_PCLK_EN | PXA_CAMERA_PCP;
   2250	if (ep.bus.parallel.flags & V4L2_MBUS_PCLK_SAMPLE_FALLING)
   2251		pcdev->platform_flags |= PXA_CAMERA_PCLK_EN;
   2252
   2253	asd = v4l2_async_nf_add_fwnode_remote(&pcdev->notifier,
   2254					      of_fwnode_handle(np),
   2255					      struct v4l2_async_subdev);
   2256	if (IS_ERR(asd))
   2257		err = PTR_ERR(asd);
   2258out:
   2259	of_node_put(np);
   2260
   2261	return err;
   2262}
   2263
   2264static int pxa_camera_probe(struct platform_device *pdev)
   2265{
   2266	struct pxa_camera_dev *pcdev;
   2267	struct resource *res;
   2268	void __iomem *base;
   2269	struct dma_slave_config config = {
   2270		.src_addr_width = 0,
   2271		.src_maxburst = 8,
   2272		.direction = DMA_DEV_TO_MEM,
   2273	};
   2274	int irq;
   2275	int err = 0, i;
   2276
   2277	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
   2278	irq = platform_get_irq(pdev, 0);
   2279	if (!res || irq < 0)
   2280		return -ENODEV;
   2281
   2282	pcdev = devm_kzalloc(&pdev->dev, sizeof(*pcdev), GFP_KERNEL);
   2283	if (!pcdev) {
   2284		dev_err(&pdev->dev, "Could not allocate pcdev\n");
   2285		return -ENOMEM;
   2286	}
   2287
   2288	pcdev->clk = devm_clk_get(&pdev->dev, NULL);
   2289	if (IS_ERR(pcdev->clk))
   2290		return PTR_ERR(pcdev->clk);
   2291
   2292	v4l2_async_nf_init(&pcdev->notifier);
   2293	pcdev->res = res;
   2294	pcdev->pdata = pdev->dev.platform_data;
   2295	if (pcdev->pdata) {
   2296		struct v4l2_async_subdev *asd;
   2297
   2298		pcdev->platform_flags = pcdev->pdata->flags;
   2299		pcdev->mclk = pcdev->pdata->mclk_10khz * 10000;
   2300		asd = v4l2_async_nf_add_i2c(&pcdev->notifier,
   2301					    pcdev->pdata->sensor_i2c_adapter_id,
   2302					    pcdev->pdata->sensor_i2c_address,
   2303					    struct v4l2_async_subdev);
   2304		if (IS_ERR(asd))
   2305			err = PTR_ERR(asd);
   2306	} else if (pdev->dev.of_node) {
   2307		err = pxa_camera_pdata_from_dt(&pdev->dev, pcdev);
   2308	} else {
   2309		return -ENODEV;
   2310	}
   2311	if (err < 0)
   2312		return err;
   2313
   2314	if (!(pcdev->platform_flags & (PXA_CAMERA_DATAWIDTH_8 |
   2315			PXA_CAMERA_DATAWIDTH_9 | PXA_CAMERA_DATAWIDTH_10))) {
   2316		/*
   2317		 * Platform hasn't set available data widths. This is bad.
   2318		 * Warn and use a default.
   2319		 */
   2320		dev_warn(&pdev->dev, "WARNING! Platform hasn't set available data widths, using default 10 bit\n");
   2321		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_10;
   2322	}
   2323	if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_8)
   2324		pcdev->width_flags = 1 << 7;
   2325	if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_9)
   2326		pcdev->width_flags |= 1 << 8;
   2327	if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_10)
   2328		pcdev->width_flags |= 1 << 9;
   2329	if (!pcdev->mclk) {
   2330		dev_warn(&pdev->dev,
   2331			 "mclk == 0! Please, fix your platform data. Using default 20MHz\n");
   2332		pcdev->mclk = 20000000;
   2333	}
   2334
   2335	pcdev->mclk_divisor = mclk_get_divisor(pdev, pcdev);
   2336
   2337	INIT_LIST_HEAD(&pcdev->capture);
   2338	spin_lock_init(&pcdev->lock);
   2339	mutex_init(&pcdev->mlock);
   2340
   2341	/*
   2342	 * Request the regions.
   2343	 */
   2344	base = devm_ioremap_resource(&pdev->dev, res);
   2345	if (IS_ERR(base))
   2346		return PTR_ERR(base);
   2347
   2348	pcdev->irq = irq;
   2349	pcdev->base = base;
   2350
   2351	/* request dma */
   2352	pcdev->dma_chans[0] = dma_request_chan(&pdev->dev, "CI_Y");
   2353	if (IS_ERR(pcdev->dma_chans[0])) {
   2354		dev_err(&pdev->dev, "Can't request DMA for Y\n");
   2355		return PTR_ERR(pcdev->dma_chans[0]);
   2356	}
   2357
   2358	pcdev->dma_chans[1] = dma_request_chan(&pdev->dev, "CI_U");
   2359	if (IS_ERR(pcdev->dma_chans[1])) {
   2360		dev_err(&pdev->dev, "Can't request DMA for U\n");
   2361		err = PTR_ERR(pcdev->dma_chans[1]);
   2362		goto exit_free_dma_y;
   2363	}
   2364
   2365	pcdev->dma_chans[2] = dma_request_chan(&pdev->dev, "CI_V");
   2366	if (IS_ERR(pcdev->dma_chans[2])) {
   2367		dev_err(&pdev->dev, "Can't request DMA for V\n");
   2368		err = PTR_ERR(pcdev->dma_chans[2]);
   2369		goto exit_free_dma_u;
   2370	}
   2371
   2372	for (i = 0; i < 3; i++) {
   2373		config.src_addr = pcdev->res->start + CIBR0 + i * 8;
   2374		err = dmaengine_slave_config(pcdev->dma_chans[i], &config);
   2375		if (err < 0) {
   2376			dev_err(&pdev->dev, "dma slave config failed: %d\n",
   2377				err);
   2378			goto exit_free_dma;
   2379		}
   2380	}
   2381
   2382	/* request irq */
   2383	err = devm_request_irq(&pdev->dev, pcdev->irq, pxa_camera_irq, 0,
   2384			       PXA_CAM_DRV_NAME, pcdev);
   2385	if (err) {
   2386		dev_err(&pdev->dev, "Camera interrupt register failed\n");
   2387		goto exit_free_dma;
   2388	}
   2389
   2390	tasklet_setup(&pcdev->task_eof, pxa_camera_eof);
   2391
   2392	pxa_camera_activate(pcdev);
   2393
   2394	platform_set_drvdata(pdev, pcdev);
   2395	err = v4l2_device_register(&pdev->dev, &pcdev->v4l2_dev);
   2396	if (err)
   2397		goto exit_deactivate;
   2398
   2399	err = pxa_camera_init_videobuf2(pcdev);
   2400	if (err)
   2401		goto exit_notifier_cleanup;
   2402
   2403	pcdev->notifier.ops = &pxa_camera_sensor_ops;
   2404	err = v4l2_async_nf_register(&pcdev->v4l2_dev, &pcdev->notifier);
   2405	if (err)
   2406		goto exit_notifier_cleanup;
   2407
   2408	return 0;
   2409exit_notifier_cleanup:
   2410	v4l2_async_nf_cleanup(&pcdev->notifier);
   2411	v4l2_device_unregister(&pcdev->v4l2_dev);
   2412exit_deactivate:
   2413	pxa_camera_deactivate(pcdev);
   2414	tasklet_kill(&pcdev->task_eof);
   2415exit_free_dma:
   2416	dma_release_channel(pcdev->dma_chans[2]);
   2417exit_free_dma_u:
   2418	dma_release_channel(pcdev->dma_chans[1]);
   2419exit_free_dma_y:
   2420	dma_release_channel(pcdev->dma_chans[0]);
   2421	return err;
   2422}
   2423
   2424static int pxa_camera_remove(struct platform_device *pdev)
   2425{
   2426	struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev);
   2427
   2428	pxa_camera_deactivate(pcdev);
   2429	tasklet_kill(&pcdev->task_eof);
   2430	dma_release_channel(pcdev->dma_chans[0]);
   2431	dma_release_channel(pcdev->dma_chans[1]);
   2432	dma_release_channel(pcdev->dma_chans[2]);
   2433
   2434	v4l2_async_nf_unregister(&pcdev->notifier);
   2435	v4l2_async_nf_cleanup(&pcdev->notifier);
   2436
   2437	v4l2_device_unregister(&pcdev->v4l2_dev);
   2438
   2439	dev_info(&pdev->dev, "PXA Camera driver unloaded\n");
   2440
   2441	return 0;
   2442}
   2443
   2444static const struct dev_pm_ops pxa_camera_pm = {
   2445	.suspend	= pxa_camera_suspend,
   2446	.resume		= pxa_camera_resume,
   2447};
   2448
   2449static const struct of_device_id pxa_camera_of_match[] = {
   2450	{ .compatible = "marvell,pxa270-qci", },
   2451	{},
   2452};
   2453MODULE_DEVICE_TABLE(of, pxa_camera_of_match);
   2454
   2455static struct platform_driver pxa_camera_driver = {
   2456	.driver		= {
   2457		.name	= PXA_CAM_DRV_NAME,
   2458		.pm	= &pxa_camera_pm,
   2459		.of_match_table = of_match_ptr(pxa_camera_of_match),
   2460	},
   2461	.probe		= pxa_camera_probe,
   2462	.remove		= pxa_camera_remove,
   2463};
   2464
   2465module_platform_driver(pxa_camera_driver);
   2466
   2467MODULE_DESCRIPTION("PXA27x Camera Driver");
   2468MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
   2469MODULE_LICENSE("GPL");
   2470MODULE_VERSION(PXA_CAM_VERSION);
   2471MODULE_ALIAS("platform:" PXA_CAM_DRV_NAME);