pxa_camera.c 52.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*
 * V4L2 Driver for PXA camera host
 *
 * Copyright (C) 2006, Sascha Hauer, Pengutronix
 * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

#include <linux/init.h>
#include <linux/module.h>
15
#include <linux/io.h>
16 17
#include <linux/delay.h>
#include <linux/dma-mapping.h>
18
#include <linux/err.h>
19 20 21 22 23 24 25 26 27 28
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/moduleparam.h>
#include <linux/time.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/clk.h>
29
#include <linux/sched.h>
30
#include <linux/slab.h>
31 32 33

#include <media/v4l2-common.h>
#include <media/v4l2-dev.h>
34
#include <media/videobuf-dma-sg.h>
35
#include <media/soc_camera.h>
36
#include <media/soc_mediabus.h>
37
#include <media/v4l2-of.h>
38 39 40

#include <linux/videodev2.h>

41
#include <mach/dma.h>
42
#include <linux/platform_data/camera-pxa.h>
43

44
#define PXA_CAM_VERSION "0.0.6"
45 46
#define PXA_CAM_DRV_NAME "pxa27x-camera"

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
/* Camera Interface */
#define CICR0		0x0000
#define CICR1		0x0004
#define CICR2		0x0008
#define CICR3		0x000C
#define CICR4		0x0010
#define CISR		0x0014
#define CIFR		0x0018
#define CITOR		0x001C
#define CIBR0		0x0028
#define CIBR1		0x0030
#define CIBR2		0x0038

#define CICR0_DMAEN	(1 << 31)	/* DMA request enable */
#define CICR0_PAR_EN	(1 << 30)	/* Parity enable */
#define CICR0_SL_CAP_EN	(1 << 29)	/* Capture enable for slave mode */
#define CICR0_ENB	(1 << 28)	/* Camera interface enable */
#define CICR0_DIS	(1 << 27)	/* Camera interface disable */
#define CICR0_SIM	(0x7 << 24)	/* Sensor interface mode mask */
#define CICR0_TOM	(1 << 9)	/* Time-out mask */
#define CICR0_RDAVM	(1 << 8)	/* Receive-data-available mask */
#define CICR0_FEM	(1 << 7)	/* FIFO-empty mask */
#define CICR0_EOLM	(1 << 6)	/* End-of-line mask */
#define CICR0_PERRM	(1 << 5)	/* Parity-error mask */
#define CICR0_QDM	(1 << 4)	/* Quick-disable mask */
#define CICR0_CDM	(1 << 3)	/* Disable-done mask */
#define CICR0_SOFM	(1 << 2)	/* Start-of-frame mask */
#define CICR0_EOFM	(1 << 1)	/* End-of-frame mask */
#define CICR0_FOM	(1 << 0)	/* FIFO-overrun mask */

#define CICR1_TBIT	(1 << 31)	/* Transparency bit */
#define CICR1_RGBT_CONV	(0x3 << 29)	/* RGBT conversion mask */
#define CICR1_PPL	(0x7ff << 15)	/* Pixels per line mask */
#define CICR1_RGB_CONV	(0x7 << 12)	/* RGB conversion mask */
#define CICR1_RGB_F	(1 << 11)	/* RGB format */
#define CICR1_YCBCR_F	(1 << 10)	/* YCbCr format */
#define CICR1_RGB_BPP	(0x7 << 7)	/* RGB bis per pixel mask */
#define CICR1_RAW_BPP	(0x3 << 5)	/* Raw bis per pixel mask */
#define CICR1_COLOR_SP	(0x3 << 3)	/* Color space mask */
#define CICR1_DW	(0x7 << 0)	/* Data width mask */

#define CICR2_BLW	(0xff << 24)	/* Beginning-of-line pixel clock
					   wait count mask */
#define CICR2_ELW	(0xff << 16)	/* End-of-line pixel clock
					   wait count mask */
#define CICR2_HSW	(0x3f << 10)	/* Horizontal sync pulse width mask */
#define CICR2_BFPW	(0x3f << 3)	/* Beginning-of-frame pixel clock
					   wait count mask */
#define CICR2_FSW	(0x7 << 0)	/* Frame stabilization
					   wait count mask */

#define CICR3_BFW	(0xff << 24)	/* Beginning-of-frame line clock
					   wait count mask */
#define CICR3_EFW	(0xff << 16)	/* End-of-frame line clock
					   wait count mask */
#define CICR3_VSW	(0x3f << 10)	/* Vertical sync pulse width mask */
#define CICR3_BFPW	(0x3f << 3)	/* Beginning-of-frame pixel clock
					   wait count mask */
#define CICR3_LPF	(0x7ff << 0)	/* Lines per frame mask */

#define CICR4_MCLK_DLY	(0x3 << 24)	/* MCLK Data Capture Delay mask */
#define CICR4_PCLK_EN	(1 << 23)	/* Pixel clock enable */
#define CICR4_PCP	(1 << 22)	/* Pixel clock polarity */
#define CICR4_HSP	(1 << 21)	/* Horizontal sync polarity */
#define CICR4_VSP	(1 << 20)	/* Vertical sync polarity */
#define CICR4_MCLK_EN	(1 << 19)	/* MCLK enable */
#define CICR4_FR_RATE	(0x7 << 8)	/* Frame rate mask */
#define CICR4_DIV	(0xff << 0)	/* Clock divisor mask */

#define CISR_FTO	(1 << 15)	/* FIFO time-out */
#define CISR_RDAV_2	(1 << 14)	/* Channel 2 receive data available */
#define CISR_RDAV_1	(1 << 13)	/* Channel 1 receive data available */
#define CISR_RDAV_0	(1 << 12)	/* Channel 0 receive data available */
#define CISR_FEMPTY_2	(1 << 11)	/* Channel 2 FIFO empty */
#define CISR_FEMPTY_1	(1 << 10)	/* Channel 1 FIFO empty */
#define CISR_FEMPTY_0	(1 << 9)	/* Channel 0 FIFO empty */
#define CISR_EOL	(1 << 8)	/* End of line */
#define CISR_PAR_ERR	(1 << 7)	/* Parity error */
#define CISR_CQD	(1 << 6)	/* Camera interface quick disable */
#define CISR_CDD	(1 << 5)	/* Camera interface disable done */
#define CISR_SOF	(1 << 4)	/* Start of frame */
#define CISR_EOF	(1 << 3)	/* End of frame */
#define CISR_IFO_2	(1 << 2)	/* FIFO overrun for Channel 2 */
#define CISR_IFO_1	(1 << 1)	/* FIFO overrun for Channel 1 */
#define CISR_IFO_0	(1 << 0)	/* FIFO overrun for Channel 0 */

#define CIFR_FLVL2	(0x7f << 23)	/* FIFO 2 level mask */
#define CIFR_FLVL1	(0x7f << 16)	/* FIFO 1 level mask */
#define CIFR_FLVL0	(0xff << 8)	/* FIFO 0 level mask */
#define CIFR_THL_0	(0x3 << 4)	/* Threshold Level for Channel 0 FIFO */
#define CIFR_RESET_F	(1 << 3)	/* Reset input FIFOs */
#define CIFR_FEN2	(1 << 2)	/* FIFO enable for channel 2 */
#define CIFR_FEN1	(1 << 1)	/* FIFO enable for channel 1 */
#define CIFR_FEN0	(1 << 0)	/* FIFO enable for channel 0 */

142 143 144 145 146 147 148 149
#define CICR0_SIM_MP	(0 << 24)
#define CICR0_SIM_SP	(1 << 24)
#define CICR0_SIM_MS	(2 << 24)
#define CICR0_SIM_EP	(3 << 24)
#define CICR0_SIM_ES	(4 << 24)

#define CICR1_DW_VAL(x)   ((x) & CICR1_DW)	    /* Data bus width */
#define CICR1_PPL_VAL(x)  (((x) << 15) & CICR1_PPL) /* Pixels per line */
150 151 152
#define CICR1_COLOR_SP_VAL(x)	(((x) << 3) & CICR1_COLOR_SP)	/* color space */
#define CICR1_RGB_BPP_VAL(x)	(((x) << 7) & CICR1_RGB_BPP)	/* bpp for rgb */
#define CICR1_RGBT_CONV_VAL(x)	(((x) << 29) & CICR1_RGBT_CONV)	/* rgbt conv */
153 154 155 156 157 158 159 160 161 162 163 164

#define CICR2_BLW_VAL(x)  (((x) << 24) & CICR2_BLW) /* Beginning-of-line pixel clock wait count */
#define CICR2_ELW_VAL(x)  (((x) << 16) & CICR2_ELW) /* End-of-line pixel clock wait count */
#define CICR2_HSW_VAL(x)  (((x) << 10) & CICR2_HSW) /* Horizontal sync pulse width */
#define CICR2_BFPW_VAL(x) (((x) << 3) & CICR2_BFPW) /* Beginning-of-frame pixel clock wait count */
#define CICR2_FSW_VAL(x)  (((x) << 0) & CICR2_FSW)  /* Frame stabilization wait count */

#define CICR3_BFW_VAL(x)  (((x) << 24) & CICR3_BFW) /* Beginning-of-frame line clock wait count  */
#define CICR3_EFW_VAL(x)  (((x) << 16) & CICR3_EFW) /* End-of-frame line clock wait count */
#define CICR3_VSW_VAL(x)  (((x) << 11) & CICR3_VSW) /* Vertical sync pulse width */
#define CICR3_LPF_VAL(x)  (((x) << 0) & CICR3_LPF)  /* Lines per frame */

165 166 167 168 169 170 171
#define CICR0_IRQ_MASK (CICR0_TOM | CICR0_RDAVM | CICR0_FEM | CICR0_EOLM | \
			CICR0_PERRM | CICR0_QDM | CICR0_CDM | CICR0_SOFM | \
			CICR0_EOFM | CICR0_FOM)

/*
 * Structures
 */
172 173 174 175 176 177 178 179 180 181 182 183 184
enum pxa_camera_active_dma {
	DMA_Y = 0x1,
	DMA_U = 0x2,
	DMA_V = 0x4,
};

/* descriptor needed for the PXA DMA engine */
struct pxa_cam_dma {
	dma_addr_t		sg_dma;
	struct pxa_dma_desc	*sg_cpu;
	size_t			sg_size;
	int			sglen;
};
185 186 187 188

/* buffer for one video frame */
struct pxa_buffer {
	/* common v4l buffer stuff -- must be first */
189
	struct videobuf_buffer		vb;
190
	u32	code;
191
	/* our descriptor lists for Y, U and V channels */
192 193 194
	struct pxa_cam_dma		dmas[3];
	int				inwork;
	enum pxa_camera_active_dma	active_dma;
195 196 197
};

struct pxa_camera_dev {
198
	struct soc_camera_host	soc_host;
199 200
	/*
	 * PXA27x is only supposed to handle one camera on its Quick Capture
201
	 * interface. If anyone ever builds hardware to enable more than
202 203
	 * one camera, they will have to modify this driver too
	 */
204 205 206 207
	struct clk		*clk;

	unsigned int		irq;
	void __iomem		*base;
208

209
	int			channels;
210
	unsigned int		dma_chans[3];
211 212 213 214

	struct pxacamera_platform_data *pdata;
	struct resource		*res;
	unsigned long		platform_flags;
215 216 217
	unsigned long		ciclk;
	unsigned long		mclk;
	u32			mclk_divisor;
218
	u16			width_flags;	/* max 10 bits */
219 220 221 222 223 224

	struct list_head	capture;

	spinlock_t		lock;

	struct pxa_buffer	*active;
225
	struct pxa_dma_desc	*sg_tail[3];
226 227

	u32			save_cicr[5];
228 229
};

230 231 232 233
struct pxa_cam {
	unsigned long flags;
};

234 235 236 237 238 239 240
static const char *pxa_cam_driver_description = "PXA_Camera";

static unsigned int vid_limit = 16;	/* Video memory limit, in Mb */

/*
 *  Videobuf operations
 */
241 242
static int pxa_videobuf_setup(struct videobuf_queue *vq, unsigned int *count,
			      unsigned int *size)
243 244 245
{
	struct soc_camera_device *icd = vq->priv_data;

246
	dev_dbg(icd->parent, "count=%d, size=%d\n", *count, *size);
247

248
	*size = icd->sizeimage;
249 250 251

	if (0 == *count)
		*count = 32;
252 253
	if (*size * *count > vid_limit * 1024 * 1024)
		*count = (vid_limit * 1024 * 1024) / *size;
254 255 256 257 258 259 260

	return 0;
}

static void free_buffer(struct videobuf_queue *vq, struct pxa_buffer *buf)
{
	struct soc_camera_device *icd = vq->priv_data;
261
	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
262
	struct videobuf_dmabuf *dma = videobuf_to_dma(&buf->vb);
263
	int i;
264 265 266

	BUG_ON(in_interrupt());

267
	dev_dbg(icd->parent, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
268 269
		&buf->vb, buf->vb.baddr, buf->vb.bsize);

270 271 272 273
	/*
	 * This waits until this buffer is out of danger, i.e., until it is no
	 * longer in STATE_QUEUED or STATE_ACTIVE
	 */
274
	videobuf_waiton(vq, &buf->vb, 0, 0);
275
	videobuf_dma_unmap(vq->dev, dma);
276 277
	videobuf_dma_free(dma);

278 279
	for (i = 0; i < ARRAY_SIZE(buf->dmas); i++) {
		if (buf->dmas[i].sg_cpu)
280 281
			dma_free_coherent(ici->v4l2_dev.dev,
					  buf->dmas[i].sg_size,
282 283 284 285
					  buf->dmas[i].sg_cpu,
					  buf->dmas[i].sg_dma);
		buf->dmas[i].sg_cpu = NULL;
	}
286 287 288 289

	buf->vb.state = VIDEOBUF_NEEDS_INIT;
}

290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328
static int calculate_dma_sglen(struct scatterlist *sglist, int sglen,
			       int sg_first_ofs, int size)
{
	int i, offset, dma_len, xfer_len;
	struct scatterlist *sg;

	offset = sg_first_ofs;
	for_each_sg(sglist, sg, sglen, i) {
		dma_len = sg_dma_len(sg);

		/* PXA27x Developer's Manual 27.4.4.1: round up to 8 bytes */
		xfer_len = roundup(min(dma_len - offset, size), 8);

		size = max(0, size - xfer_len);
		offset = 0;
		if (size == 0)
			break;
	}

	BUG_ON(size != 0);
	return i + 1;
}

/**
 * pxa_init_dma_channel - init dma descriptors
 * @pcdev: pxa camera device
 * @buf: pxa buffer to find pxa dma channel
 * @dma: dma video buffer
 * @channel: dma channel (0 => 'Y', 1 => 'U', 2 => 'V')
 * @cibr: camera Receive Buffer Register
 * @size: bytes to transfer
 * @sg_first: first element of sg_list
 * @sg_first_ofs: offset in first element of sg_list
 *
 * Prepares the pxa dma descriptors to transfer one camera channel.
 * Beware sg_first and sg_first_ofs are both input and output parameters.
 *
 * Returns 0 or -ENOMEM if no coherent memory is available
 */
329 330 331
static int pxa_init_dma_channel(struct pxa_camera_dev *pcdev,
				struct pxa_buffer *buf,
				struct videobuf_dmabuf *dma, int channel,
332 333
				int cibr, int size,
				struct scatterlist **sg_first, int *sg_first_ofs)
334 335
{
	struct pxa_cam_dma *pxa_dma = &buf->dmas[channel];
336
	struct device *dev = pcdev->soc_host.v4l2_dev.dev;
337 338 339
	struct scatterlist *sg;
	int i, offset, sglen;
	int dma_len = 0, xfer_len = 0;
340 341

	if (pxa_dma->sg_cpu)
342
		dma_free_coherent(dev, pxa_dma->sg_size,
343 344
				  pxa_dma->sg_cpu, pxa_dma->sg_dma);

345 346 347
	sglen = calculate_dma_sglen(*sg_first, dma->sglen,
				    *sg_first_ofs, size);

348
	pxa_dma->sg_size = (sglen + 1) * sizeof(struct pxa_dma_desc);
349
	pxa_dma->sg_cpu = dma_alloc_coherent(dev, pxa_dma->sg_size,
350 351 352 353 354
					     &pxa_dma->sg_dma, GFP_KERNEL);
	if (!pxa_dma->sg_cpu)
		return -ENOMEM;

	pxa_dma->sglen = sglen;
355
	offset = *sg_first_ofs;
356

357
	dev_dbg(dev, "DMA: sg_first=%p, sglen=%d, ofs=%d, dma.desc=%x\n",
358
		*sg_first, sglen, *sg_first_ofs, pxa_dma->sg_dma);
359

360 361 362

	for_each_sg(*sg_first, sg, sglen, i) {
		dma_len = sg_dma_len(sg);
363 364

		/* PXA27x Developer's Manual 27.4.4.1: round up to 8 bytes */
365
		xfer_len = roundup(min(dma_len - offset, size), 8);
366

367 368 369 370
		size = max(0, size - xfer_len);

		pxa_dma->sg_cpu[i].dsadr = pcdev->res->start + cibr;
		pxa_dma->sg_cpu[i].dtadr = sg_dma_address(sg) + offset;
371 372
		pxa_dma->sg_cpu[i].dcmd =
			DCMD_FLOWSRC | DCMD_BURST8 | DCMD_INCTRGADDR | xfer_len;
373 374 375 376
#ifdef DEBUG
		if (!i)
			pxa_dma->sg_cpu[i].dcmd |= DCMD_STARTIRQEN;
#endif
377 378
		pxa_dma->sg_cpu[i].ddadr =
			pxa_dma->sg_dma + (i + 1) * sizeof(struct pxa_dma_desc);
379

380
		dev_vdbg(dev, "DMA: desc.%08x->@phys=0x%08x, len=%d\n",
381 382 383 384 385 386
			 pxa_dma->sg_dma + i * sizeof(struct pxa_dma_desc),
			 sg_dma_address(sg) + offset, xfer_len);
		offset = 0;

		if (size == 0)
			break;
387 388
	}

389 390
	pxa_dma->sg_cpu[sglen].ddadr = DDADR_STOP;
	pxa_dma->sg_cpu[sglen].dcmd  = DCMD_FLOWSRC | DCMD_BURST8 | DCMD_ENDIRQEN;
391

392 393 394 395 396 397 398 399 400 401 402 403 404 405 406
	/*
	 * Handle 1 special case :
	 *  - in 3 planes (YUV422P format), we might finish with xfer_len equal
	 *    to dma_len (end on PAGE boundary). In this case, the sg element
	 *    for next plane should be the next after the last used to store the
	 *    last scatter gather RAM page
	 */
	if (xfer_len >= dma_len) {
		*sg_first_ofs = xfer_len - dma_len;
		*sg_first = sg_next(sg);
	} else {
		*sg_first_ofs = xfer_len;
		*sg_first = sg;
	}

407 408 409
	return 0;
}

410 411 412 413 414 415 416 417 418 419 420 421 422 423
static void pxa_videobuf_set_actdma(struct pxa_camera_dev *pcdev,
				    struct pxa_buffer *buf)
{
	buf->active_dma = DMA_Y;
	if (pcdev->channels == 3)
		buf->active_dma |= DMA_U | DMA_V;
}

/*
 * Please check the DMA prepared buffer structure in :
 *   Documentation/video4linux/pxa_camera.txt
 * Please check also in pxa_camera_check_link_miss() to understand why DMA chain
 * modification while DMA chain is running will work anyway.
 */
424 425
static int pxa_videobuf_prepare(struct videobuf_queue *vq,
		struct videobuf_buffer *vb, enum v4l2_field field)
426 427
{
	struct soc_camera_device *icd = vq->priv_data;
428
	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
429
	struct pxa_camera_dev *pcdev = ici->priv;
430
	struct device *dev = pcdev->soc_host.v4l2_dev.dev;
431
	struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
432 433
	int ret;
	int size_y, size_u = 0, size_v = 0;
434

435
	dev_dbg(dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
436 437 438 439 440 441
		vb, vb->baddr, vb->bsize);

	/* Added list head initialization on alloc */
	WARN_ON(!list_empty(&vb->queue));

#ifdef DEBUG
442 443 444 445
	/*
	 * This can be useful if you want to see if we actually fill
	 * the buffer with something
	 */
446 447 448 449 450
	memset((void *)vb->baddr, 0xaa, vb->bsize);
#endif

	BUG_ON(NULL == icd->current_fmt);

451 452 453 454
	/*
	 * I think, in buf_prepare you only have to protect global data,
	 * the actual buffer is yours
	 */
455 456
	buf->inwork = 1;

457
	if (buf->code	!= icd->current_fmt->code ||
458 459
	    vb->width	!= icd->user_width ||
	    vb->height	!= icd->user_height ||
460
	    vb->field	!= field) {
461
		buf->code	= icd->current_fmt->code;
462 463
		vb->width	= icd->user_width;
		vb->height	= icd->user_height;
464 465 466 467
		vb->field	= field;
		vb->state	= VIDEOBUF_NEEDS_INIT;
	}

468
	vb->size = icd->sizeimage;
469 470 471 472 473 474
	if (0 != vb->baddr && vb->bsize < vb->size) {
		ret = -EINVAL;
		goto out;
	}

	if (vb->state == VIDEOBUF_NEEDS_INIT) {
475 476
		int size = vb->size;
		int next_ofs = 0;
477
		struct videobuf_dmabuf *dma = videobuf_to_dma(vb);
478
		struct scatterlist *sg;
479 480 481 482 483

		ret = videobuf_iolock(vq, vb, NULL);
		if (ret)
			goto fail;

484
		if (pcdev->channels == 3) {
485 486 487 488 489 490
			size_y = size / 2;
			size_u = size_v = size / 4;
		} else {
			size_y = size;
		}

491
		sg = dma->sglist;
492

493 494 495
		/* init DMA for Y channel */
		ret = pxa_init_dma_channel(pcdev, buf, dma, 0, CIBR0, size_y,
					   &sg, &next_ofs);
496
		if (ret) {
497
			dev_err(dev, "DMA initialization for Y/RGB failed\n");
498 499 500
			goto fail;
		}

501 502 503 504 505
		/* init DMA for U channel */
		if (size_u)
			ret = pxa_init_dma_channel(pcdev, buf, dma, 1, CIBR1,
						   size_u, &sg, &next_ofs);
		if (ret) {
506
			dev_err(dev, "DMA initialization for U failed\n");
507 508 509 510 511 512 513 514
			goto fail_u;
		}

		/* init DMA for V channel */
		if (size_v)
			ret = pxa_init_dma_channel(pcdev, buf, dma, 2, CIBR2,
						   size_v, &sg, &next_ofs);
		if (ret) {
515
			dev_err(dev, "DMA initialization for V failed\n");
516
			goto fail_v;
517 518 519 520 521 522
		}

		vb->state = VIDEOBUF_PREPARED;
	}

	buf->inwork = 0;
523
	pxa_videobuf_set_actdma(pcdev, buf);
524 525 526

	return 0;

527
fail_v:
528
	dma_free_coherent(dev, buf->dmas[1].sg_size,
529 530
			  buf->dmas[1].sg_cpu, buf->dmas[1].sg_dma);
fail_u:
531
	dma_free_coherent(dev, buf->dmas[0].sg_size,
532
			  buf->dmas[0].sg_cpu, buf->dmas[0].sg_dma);
533 534 535 536 537 538 539
fail:
	free_buffer(vq, buf);
out:
	buf->inwork = 0;
	return ret;
}

540 541 542 543 544 545 546 547 548 549 550 551 552 553 554
/**
 * pxa_dma_start_channels - start DMA channel for active buffer
 * @pcdev: pxa camera device
 *
 * Initialize DMA channels to the beginning of the active video buffer, and
 * start these channels.
 */
static void pxa_dma_start_channels(struct pxa_camera_dev *pcdev)
{
	int i;
	struct pxa_buffer *active;

	active = pcdev->active;

	for (i = 0; i < pcdev->channels; i++) {
555 556
		dev_dbg(pcdev->soc_host.v4l2_dev.dev,
			"%s (channel=%d) ddadr=%08x\n", __func__,
557 558 559 560 561 562 563 564 565 566 567
			i, active->dmas[i].sg_dma);
		DDADR(pcdev->dma_chans[i]) = active->dmas[i].sg_dma;
		DCSR(pcdev->dma_chans[i]) = DCSR_RUN;
	}
}

static void pxa_dma_stop_channels(struct pxa_camera_dev *pcdev)
{
	int i;

	for (i = 0; i < pcdev->channels; i++) {
568 569
		dev_dbg(pcdev->soc_host.v4l2_dev.dev,
			"%s (channel=%d)\n", __func__, i);
570 571 572 573 574 575 576 577 578 579 580 581 582 583
		DCSR(pcdev->dma_chans[i]) = 0;
	}
}

static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev,
				 struct pxa_buffer *buf)
{
	int i;
	struct pxa_dma_desc *buf_last_desc;

	for (i = 0; i < pcdev->channels; i++) {
		buf_last_desc = buf->dmas[i].sg_cpu + buf->dmas[i].sglen;
		buf_last_desc->ddadr = DDADR_STOP;

584 585 586
		if (pcdev->sg_tail[i])
			/* Link the new buffer to the old tail */
			pcdev->sg_tail[i]->ddadr = buf->dmas[i].sg_dma;
587

588 589 590
		/* Update the channel tail */
		pcdev->sg_tail[i] = buf_last_desc;
	}
591 592 593 594 595 596 597 598 599 600 601 602
}

/**
 * pxa_camera_start_capture - start video capturing
 * @pcdev: camera device
 *
 * Launch capturing. DMA channels should not be active yet. They should get
 * activated at the end of frame interrupt, to capture only whole frames, and
 * never begin the capture of a partial frame.
 */
static void pxa_camera_start_capture(struct pxa_camera_dev *pcdev)
{
603
	unsigned long cicr0;
604

605
	dev_dbg(pcdev->soc_host.v4l2_dev.dev, "%s\n", __func__);
606 607 608 609 610 611 612 613 614 615 616 617 618 619 620
	/* Enable End-Of-Frame Interrupt */
	cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_ENB;
	cicr0 &= ~CICR0_EOFM;
	__raw_writel(cicr0, pcdev->base + CICR0);
}

static void pxa_camera_stop_capture(struct pxa_camera_dev *pcdev)
{
	unsigned long cicr0;

	pxa_dma_stop_channels(pcdev);

	cicr0 = __raw_readl(pcdev->base + CICR0) & ~CICR0_ENB;
	__raw_writel(cicr0, pcdev->base + CICR0);

621
	pcdev->active = NULL;
622
	dev_dbg(pcdev->soc_host.v4l2_dev.dev, "%s\n", __func__);
623 624
}

625
/* Called under spinlock_irqsave(&pcdev->lock, ...) */
626 627
static void pxa_videobuf_queue(struct videobuf_queue *vq,
			       struct videobuf_buffer *vb)
628 629
{
	struct soc_camera_device *icd = vq->priv_data;
630
	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
631 632 633
	struct pxa_camera_dev *pcdev = ici->priv;
	struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);

634
	dev_dbg(icd->parent, "%s (vb=0x%p) 0x%08lx %d active=%p\n",
635
		__func__, vb, vb->baddr, vb->bsize, pcdev->active);
636

637 638 639
	list_add_tail(&vb->queue, &pcdev->capture);

	vb->state = VIDEOBUF_ACTIVE;
640
	pxa_dma_add_tail_buf(pcdev, buf);
641

642 643
	if (!pcdev->active)
		pxa_camera_start_capture(pcdev);
644 645 646 647 648 649 650 651
}

static void pxa_videobuf_release(struct videobuf_queue *vq,
				 struct videobuf_buffer *vb)
{
	struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
#ifdef DEBUG
	struct soc_camera_device *icd = vq->priv_data;
652
	struct device *dev = icd->parent;
653

654
	dev_dbg(dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__,
655 656 657 658
		vb, vb->baddr, vb->bsize);

	switch (vb->state) {
	case VIDEOBUF_ACTIVE:
659
		dev_dbg(dev, "%s (active)\n", __func__);
660 661
		break;
	case VIDEOBUF_QUEUED:
662
		dev_dbg(dev, "%s (queued)\n", __func__);
663 664
		break;
	case VIDEOBUF_PREPARED:
665
		dev_dbg(dev, "%s (prepared)\n", __func__);
666 667
		break;
	default:
668
		dev_dbg(dev, "%s (unknown)\n", __func__);
669 670 671 672 673 674 675
		break;
	}
#endif

	free_buffer(vq, buf);
}

676 677 678 679
static void pxa_camera_wakeup(struct pxa_camera_dev *pcdev,
			      struct videobuf_buffer *vb,
			      struct pxa_buffer *buf)
{
680
	int i;
681

682 683 684
	/* _init is used to debug races, see comment in pxa_camera_reqbufs() */
	list_del_init(&vb->queue);
	vb->state = VIDEOBUF_DONE;
685
	v4l2_get_timestamp(&vb->ts);
686 687
	vb->field_count++;
	wake_up(&vb->done);
688 689
	dev_dbg(pcdev->soc_host.v4l2_dev.dev, "%s dequeud buffer (vb=0x%p)\n",
		__func__, vb);
690 691

	if (list_empty(&pcdev->capture)) {
692 693 694
		pxa_camera_stop_capture(pcdev);
		for (i = 0; i < pcdev->channels; i++)
			pcdev->sg_tail[i] = NULL;
695 696 697 698 699 700 701
		return;
	}

	pcdev->active = list_entry(pcdev->capture.next,
				   struct pxa_buffer, vb.queue);
}

702 703 704 705 706 707
/**
 * pxa_camera_check_link_miss - check missed DMA linking
 * @pcdev: camera device
 *
 * The DMA chaining is done with DMA running. This means a tiny temporal window
 * remains, where a buffer is queued on the chain, while the chain is already
L
Lucas De Marchi 已提交
708
 * stopped. This means the tailed buffer would never be transferred by DMA.
709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724
 * This function restarts the capture for this corner case, where :
 *  - DADR() == DADDR_STOP
 *  - a videobuffer is queued on the pcdev->capture list
 *
 * Please check the "DMA hot chaining timeslice issue" in
 *   Documentation/video4linux/pxa_camera.txt
 *
 * Context: should only be called within the dma irq handler
 */
static void pxa_camera_check_link_miss(struct pxa_camera_dev *pcdev)
{
	int i, is_dma_stopped = 1;

	for (i = 0; i < pcdev->channels; i++)
		if (DDADR(pcdev->dma_chans[i]) != DDADR_STOP)
			is_dma_stopped = 0;
725 726
	dev_dbg(pcdev->soc_host.v4l2_dev.dev,
		"%s : top queued buffer=%p, dma_stopped=%d\n",
727 728 729 730 731
		__func__, pcdev->active, is_dma_stopped);
	if (pcdev->active && is_dma_stopped)
		pxa_camera_start_capture(pcdev);
}

732 733
static void pxa_camera_dma_irq(int channel, struct pxa_camera_dev *pcdev,
			       enum pxa_camera_active_dma act_dma)
734
{
735
	struct device *dev = pcdev->soc_host.v4l2_dev.dev;
736 737
	struct pxa_buffer *buf;
	unsigned long flags;
738
	u32 status, camera_status, overrun;
739 740 741 742
	struct videobuf_buffer *vb;

	spin_lock_irqsave(&pcdev->lock, flags);

743
	status = DCSR(channel);
744 745 746 747 748 749
	DCSR(channel) = status;

	camera_status = __raw_readl(pcdev->base + CISR);
	overrun = CISR_IFO_0;
	if (pcdev->channels == 3)
		overrun |= CISR_IFO_1 | CISR_IFO_2;
750

751
	if (status & DCSR_BUSERR) {
752
		dev_err(dev, "DMA Bus Error IRQ!\n");
753 754 755
		goto out;
	}

756
	if (!(status & (DCSR_ENDINTR | DCSR_STARTINTR))) {
757 758
		dev_err(dev, "Unknown DMA IRQ source, status: 0x%08x\n",
			status);
759 760 761
		goto out;
	}

762 763 764 765 766 767 768 769 770 771 772 773 774
	/*
	 * pcdev->active should not be NULL in DMA irq handler.
	 *
	 * But there is one corner case : if capture was stopped due to an
	 * overrun of channel 1, and at that same channel 2 was completed.
	 *
	 * When handling the overrun in DMA irq for channel 1, we'll stop the
	 * capture and restart it (and thus set pcdev->active to NULL). But the
	 * DMA irq handler will already be pending for channel 2. So on entering
	 * the DMA irq handler for channel 2 there will be no active buffer, yet
	 * that is normal.
	 */
	if (!pcdev->active)
775 776 777 778 779 780
		goto out;

	vb = &pcdev->active->vb;
	buf = container_of(vb, struct pxa_buffer, vb);
	WARN_ON(buf->inwork || list_empty(&vb->queue));

781
	dev_dbg(dev, "%s channel=%d %s%s(vb=0x%p) dma.desc=%x\n",
782 783 784 785
		__func__, channel, status & DCSR_STARTINTR ? "SOF " : "",
		status & DCSR_ENDINTR ? "EOF " : "", vb, DDADR(channel));

	if (status & DCSR_ENDINTR) {
786 787 788 789 790 791
		/*
		 * It's normal if the last frame creates an overrun, as there
		 * are no more DMA descriptors to fetch from QCI fifos
		 */
		if (camera_status & overrun &&
		    !list_is_last(pcdev->capture.next, &pcdev->capture)) {
792
			dev_dbg(dev, "FIFO overrun! CISR: %x\n",
793 794 795 796 797 798 799 800 801 802 803
				camera_status);
			pxa_camera_stop_capture(pcdev);
			pxa_camera_start_capture(pcdev);
			goto out;
		}
		buf->active_dma &= ~act_dma;
		if (!buf->active_dma) {
			pxa_camera_wakeup(pcdev, vb, buf);
			pxa_camera_check_link_miss(pcdev);
		}
	}
804 805 806 807 808

out:
	spin_unlock_irqrestore(&pcdev->lock, flags);
}

809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826
static void pxa_camera_dma_irq_y(int channel, void *data)
{
	struct pxa_camera_dev *pcdev = data;
	pxa_camera_dma_irq(channel, pcdev, DMA_Y);
}

static void pxa_camera_dma_irq_u(int channel, void *data)
{
	struct pxa_camera_dev *pcdev = data;
	pxa_camera_dma_irq(channel, pcdev, DMA_U);
}

static void pxa_camera_dma_irq_v(int channel, void *data)
{
	struct pxa_camera_dev *pcdev = data;
	pxa_camera_dma_irq(channel, pcdev, DMA_V);
}

827
static struct videobuf_queue_ops pxa_videobuf_ops = {
828 829 830 831 832 833
	.buf_setup      = pxa_videobuf_setup,
	.buf_prepare    = pxa_videobuf_prepare,
	.buf_queue      = pxa_videobuf_queue,
	.buf_release    = pxa_videobuf_release,
};

834
static void pxa_camera_init_videobuf(struct videobuf_queue *q,
835 836
			      struct soc_camera_device *icd)
{
837
	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
838 839
	struct pxa_camera_dev *pcdev = ici->priv;

840 841 842 843
	/*
	 * We must pass NULL as dev pointer, then all pci_* dma operations
	 * transform to normal dma_* ones.
	 */
844
	videobuf_queue_sg_init(q, &pxa_videobuf_ops, NULL, &pcdev->lock,
845
				V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE,
846
				sizeof(struct pxa_buffer), icd, &ici->host_lock);
847 848
}

849 850
static u32 mclk_get_divisor(struct platform_device *pdev,
			    struct pxa_camera_dev *pcdev)
851
{
852
	unsigned long mclk = pcdev->mclk;
853
	struct device *dev = &pdev->dev;
854
	u32 div;
855 856
	unsigned long lcdclk;

857 858
	lcdclk = clk_get_rate(pcdev->clk);
	pcdev->ciclk = lcdclk;
859

860 861 862
	/* mclk <= ciclk / 4 (27.4.2) */
	if (mclk > lcdclk / 4) {
		mclk = lcdclk / 4;
863
		dev_warn(dev, "Limiting master clock to %lu\n", mclk);
864 865 866 867
	}

	/* We verify mclk != 0, so if anyone breaks it, here comes their Oops */
	div = (lcdclk + 2 * mclk - 1) / (2 * mclk) - 1;
868

869 870 871
	/* If we're not supplying MCLK, leave it at 0 */
	if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN)
		pcdev->mclk = lcdclk / (2 * (div + 1));
872

873
	dev_dbg(dev, "LCD clock %luHz, target freq %luHz, divisor %u\n",
874
		lcdclk, mclk, div);
875 876 877 878

	return div;
}

879 880 881 882 883 884 885 886 887
static void recalculate_fifo_timeout(struct pxa_camera_dev *pcdev,
				     unsigned long pclk)
{
	/* We want a timeout > 1 pixel time, not ">=" */
	u32 ciclk_per_pixel = pcdev->ciclk / pclk + 1;

	__raw_writel(ciclk_per_pixel, pcdev->base + CITOR);
}

888
static void pxa_camera_activate(struct pxa_camera_dev *pcdev)
889 890 891
{
	u32 cicr4 = 0;

892 893
	/* disable all interrupts */
	__raw_writel(0x3ff, pcdev->base + CICR0);
894 895 896 897 898 899 900 901 902 903 904 905

	if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN)
		cicr4 |= CICR4_PCLK_EN;
	if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN)
		cicr4 |= CICR4_MCLK_EN;
	if (pcdev->platform_flags & PXA_CAMERA_PCP)
		cicr4 |= CICR4_PCP;
	if (pcdev->platform_flags & PXA_CAMERA_HSP)
		cicr4 |= CICR4_HSP;
	if (pcdev->platform_flags & PXA_CAMERA_VSP)
		cicr4 |= CICR4_VSP;

906 907 908 909 910 911 912 913
	__raw_writel(pcdev->mclk_divisor | cicr4, pcdev->base + CICR4);

	if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN)
		/* Initialise the timeout under the assumption pclk = mclk */
		recalculate_fifo_timeout(pcdev, pcdev->mclk);
	else
		/* "Safe default" - 13MHz */
		recalculate_fifo_timeout(pcdev, 13000000);
914

915
	clk_prepare_enable(pcdev->clk);
916 917
}

918
static void pxa_camera_deactivate(struct pxa_camera_dev *pcdev)
919
{
920
	clk_disable_unprepare(pcdev->clk);
921 922 923 924 925
}

static irqreturn_t pxa_camera_irq(int irq, void *data)
{
	struct pxa_camera_dev *pcdev = data;
926
	unsigned long status, cifr, cicr0;
927 928
	struct pxa_buffer *buf;
	struct videobuf_buffer *vb;
929

930
	status = __raw_readl(pcdev->base + CISR);
931 932
	dev_dbg(pcdev->soc_host.v4l2_dev.dev,
		"Camera interrupt status 0x%lx\n", status);
933

934 935 936
	if (!status)
		return IRQ_NONE;

937
	__raw_writel(status, pcdev->base + CISR);
938 939

	if (status & CISR_EOF) {
940 941 942 943
		/* Reset the FIFOs */
		cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F;
		__raw_writel(cifr, pcdev->base + CIFR);

944 945 946 947 948 949 950 951
		pcdev->active = list_first_entry(&pcdev->capture,
					   struct pxa_buffer, vb.queue);
		vb = &pcdev->active->vb;
		buf = container_of(vb, struct pxa_buffer, vb);
		pxa_videobuf_set_actdma(pcdev, buf);

		pxa_dma_start_channels(pcdev);

952 953
		cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_EOFM;
		__raw_writel(cicr0, pcdev->base + CICR0);
954 955
	}

956 957 958
	return IRQ_HANDLED;
}

959 960 961 962 963 964 965 966 967 968 969 970 971 972
static int pxa_camera_add_device(struct soc_camera_device *icd)
{
	dev_info(icd->parent, "PXA Camera driver attached to camera %d\n",
		 icd->devnum);

	return 0;
}

static void pxa_camera_remove_device(struct soc_camera_device *icd)
{
	dev_info(icd->parent, "PXA Camera driver detached from camera %d\n",
		 icd->devnum);
}

973 974 975
/*
 * The following two functions absolutely depend on the fact, that
 * there can be only one camera on PXA quick capture interface
976
 * Called with .host_lock held
977
 */
978
static int pxa_camera_clock_start(struct soc_camera_host *ici)
979 980 981
{
	struct pxa_camera_dev *pcdev = ici->priv;

982
	pxa_camera_activate(pcdev);
983 984

	return 0;
985 986
}

987
/* Called with .host_lock held */
988
static void pxa_camera_clock_stop(struct soc_camera_host *ici)
989 990 991 992
{
	struct pxa_camera_dev *pcdev = ici->priv;

	/* disable capture, disable interrupts */
993
	__raw_writel(0x3ff, pcdev->base + CICR0);
994

995
	/* Stop DMA engine */
996 997 998
	DCSR(pcdev->dma_chans[0]) = 0;
	DCSR(pcdev->dma_chans[1]) = 0;
	DCSR(pcdev->dma_chans[2]) = 0;
999

1000
	pxa_camera_deactivate(pcdev);
1001 1002
}

1003 1004
static int test_platform_param(struct pxa_camera_dev *pcdev,
			       unsigned char buswidth, unsigned long *flags)
1005
{
1006 1007 1008 1009 1010 1011
	/*
	 * Platform specified synchronization and pixel clock polarities are
	 * only a recommendation and are only used during probing. The PXA270
	 * quick capture interface supports both.
	 */
	*flags = (pcdev->platform_flags & PXA_CAMERA_MASTER ?
1012 1013 1014 1015 1016 1017 1018 1019
		  V4L2_MBUS_MASTER : V4L2_MBUS_SLAVE) |
		V4L2_MBUS_HSYNC_ACTIVE_HIGH |
		V4L2_MBUS_HSYNC_ACTIVE_LOW |
		V4L2_MBUS_VSYNC_ACTIVE_HIGH |
		V4L2_MBUS_VSYNC_ACTIVE_LOW |
		V4L2_MBUS_DATA_ACTIVE_HIGH |
		V4L2_MBUS_PCLK_SAMPLE_RISING |
		V4L2_MBUS_PCLK_SAMPLE_FALLING;
1020 1021

	/* If requested data width is supported by the platform, use it */
1022 1023
	if ((1 << (buswidth - 1)) & pcdev->width_flags)
		return 0;
1024

1025
	return -EINVAL;
1026 1027
}

1028 1029
static void pxa_camera_setup_cicr(struct soc_camera_device *icd,
				  unsigned long flags, __u32 pixfmt)
1030
{
1031
	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
1032
	struct pxa_camera_dev *pcdev = ici->priv;
1033
	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1034
	unsigned long dw, bpp;
1035 1036 1037 1038 1039
	u32 cicr0, cicr1, cicr2, cicr3, cicr4 = 0, y_skip_top;
	int ret = v4l2_subdev_call(sd, sensor, g_skip_top_lines, &y_skip_top);

	if (ret < 0)
		y_skip_top = 0;
1040

1041 1042 1043 1044
	/*
	 * Datawidth is now guaranteed to be equal to one of the three values.
	 * We fix bit-per-pixel equal to data-width...
	 */
1045 1046
	switch (icd->current_fmt->host_fmt->bits_per_sample) {
	case 10:
1047 1048 1049
		dw = 4;
		bpp = 0x40;
		break;
1050
	case 9:
1051 1052 1053 1054
		dw = 3;
		bpp = 0x20;
		break;
	default:
1055 1056 1057 1058
		/*
		 * Actually it can only be 8 now,
		 * default is just to silence compiler warnings
		 */
1059
	case 8:
1060 1061 1062 1063 1064 1065 1066 1067
		dw = 2;
		bpp = 0;
	}

	if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN)
		cicr4 |= CICR4_PCLK_EN;
	if (pcdev->platform_flags & PXA_CAMERA_MCLK_EN)
		cicr4 |= CICR4_MCLK_EN;
1068
	if (flags & V4L2_MBUS_PCLK_SAMPLE_FALLING)
1069
		cicr4 |= CICR4_PCP;
1070
	if (flags & V4L2_MBUS_HSYNC_ACTIVE_LOW)
1071
		cicr4 |= CICR4_HSP;
1072
	if (flags & V4L2_MBUS_VSYNC_ACTIVE_LOW)
1073 1074
		cicr4 |= CICR4_VSP;

1075
	cicr0 = __raw_readl(pcdev->base + CICR0);
1076
	if (cicr0 & CICR0_ENB)
1077
		__raw_writel(cicr0 & ~CICR0_ENB, pcdev->base + CICR0);
1078

1079
	cicr1 = CICR1_PPL_VAL(icd->user_width - 1) | bpp | dw;
1080 1081 1082

	switch (pixfmt) {
	case V4L2_PIX_FMT_YUV422P:
1083
		pcdev->channels = 3;
1084
		cicr1 |= CICR1_YCBCR_F;
1085 1086 1087 1088 1089 1090 1091 1092 1093
		/*
		 * Normally, pxa bus wants as input UYVY format. We allow all
		 * reorderings of the YUV422 format, as no processing is done,
		 * and the YUV stream is just passed through without any
		 * transformation. Note that UYVY is the only format that
		 * should be used if pxa framebuffer Overlay2 is used.
		 */
	case V4L2_PIX_FMT_UYVY:
	case V4L2_PIX_FMT_VYUY:
1094
	case V4L2_PIX_FMT_YUYV:
1095
	case V4L2_PIX_FMT_YVYU:
1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106
		cicr1 |= CICR1_COLOR_SP_VAL(2);
		break;
	case V4L2_PIX_FMT_RGB555:
		cicr1 |= CICR1_RGB_BPP_VAL(1) | CICR1_RGBT_CONV_VAL(2) |
			CICR1_TBIT | CICR1_COLOR_SP_VAL(1);
		break;
	case V4L2_PIX_FMT_RGB565:
		cicr1 |= CICR1_COLOR_SP_VAL(1) | CICR1_RGB_BPP_VAL(2);
		break;
	}

1107
	cicr2 = 0;
1108
	cicr3 = CICR3_LPF_VAL(icd->user_height - 1) |
1109
		CICR3_BFW_VAL(min((u32)255, y_skip_top));
1110
	cicr4 |= pcdev->mclk_divisor;
1111 1112 1113 1114 1115

	__raw_writel(cicr1, pcdev->base + CICR1);
	__raw_writel(cicr2, pcdev->base + CICR2);
	__raw_writel(cicr3, pcdev->base + CICR3);
	__raw_writel(cicr4, pcdev->base + CICR4);
1116 1117

	/* CIF interrupts are not used, only DMA */
1118 1119 1120 1121
	cicr0 = (cicr0 & CICR0_ENB) | (pcdev->platform_flags & PXA_CAMERA_MASTER ?
		CICR0_SIM_MP : (CICR0_SL_CAP_EN | CICR0_SIM_SP));
	cicr0 |= CICR0_DMAEN | CICR0_IRQ_MASK;
	__raw_writel(cicr0, pcdev->base + CICR0);
1122 1123
}

1124
static int pxa_camera_set_bus_param(struct soc_camera_device *icd)
1125
{
1126
	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1127
	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
1128
	struct pxa_camera_dev *pcdev = ici->priv;
1129
	struct v4l2_mbus_config cfg = {.type = V4L2_MBUS_PARALLEL,};
1130
	u32 pixfmt = icd->current_fmt->host_fmt->fourcc;
1131
	unsigned long bus_flags, common_flags;
1132
	int ret;
1133 1134
	struct pxa_cam *cam = icd->host_priv;

1135 1136
	ret = test_platform_param(pcdev, icd->current_fmt->host_fmt->bits_per_sample,
				  &bus_flags);
1137 1138 1139
	if (ret < 0)
		return ret;

1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154
	ret = v4l2_subdev_call(sd, video, g_mbus_config, &cfg);
	if (!ret) {
		common_flags = soc_mbus_config_compatible(&cfg,
							  bus_flags);
		if (!common_flags) {
			dev_warn(icd->parent,
				 "Flags incompatible: camera 0x%x, host 0x%lx\n",
				 cfg.flags, bus_flags);
			return -EINVAL;
		}
	} else if (ret != -ENOIOCTLCMD) {
		return ret;
	} else {
		common_flags = bus_flags;
	}
1155 1156 1157 1158

	pcdev->channels = 1;

	/* Make choises, based on platform preferences */
1159 1160
	if ((common_flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH) &&
	    (common_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW)) {
1161
		if (pcdev->platform_flags & PXA_CAMERA_HSP)
1162
			common_flags &= ~V4L2_MBUS_HSYNC_ACTIVE_HIGH;
1163
		else
1164
			common_flags &= ~V4L2_MBUS_HSYNC_ACTIVE_LOW;
1165 1166
	}

1167 1168
	if ((common_flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH) &&
	    (common_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW)) {
1169
		if (pcdev->platform_flags & PXA_CAMERA_VSP)
1170
			common_flags &= ~V4L2_MBUS_VSYNC_ACTIVE_HIGH;
1171
		else
1172
			common_flags &= ~V4L2_MBUS_VSYNC_ACTIVE_LOW;
1173 1174
	}

1175 1176
	if ((common_flags & V4L2_MBUS_PCLK_SAMPLE_RISING) &&
	    (common_flags & V4L2_MBUS_PCLK_SAMPLE_FALLING)) {
1177
		if (pcdev->platform_flags & PXA_CAMERA_PCP)
1178
			common_flags &= ~V4L2_MBUS_PCLK_SAMPLE_RISING;
1179
		else
1180
			common_flags &= ~V4L2_MBUS_PCLK_SAMPLE_FALLING;
1181 1182
	}

1183 1184 1185 1186 1187
	cfg.flags = common_flags;
	ret = v4l2_subdev_call(sd, video, s_mbus_config, &cfg);
	if (ret < 0 && ret != -ENOIOCTLCMD) {
		dev_dbg(icd->parent, "camera s_mbus_config(0x%lx) returned %d\n",
			common_flags, ret);
1188
		return ret;
1189 1190 1191
	}

	cam->flags = common_flags;
1192 1193

	pxa_camera_setup_cicr(icd, common_flags, pixfmt);
1194 1195 1196 1197

	return 0;
}

1198 1199
static int pxa_camera_try_bus_param(struct soc_camera_device *icd,
				    unsigned char buswidth)
1200
{
1201
	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1202
	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
1203
	struct pxa_camera_dev *pcdev = ici->priv;
1204 1205
	struct v4l2_mbus_config cfg = {.type = V4L2_MBUS_PARALLEL,};
	unsigned long bus_flags, common_flags;
1206
	int ret = test_platform_param(pcdev, buswidth, &bus_flags);
1207 1208 1209 1210

	if (ret < 0)
		return ret;

1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223
	ret = v4l2_subdev_call(sd, video, g_mbus_config, &cfg);
	if (!ret) {
		common_flags = soc_mbus_config_compatible(&cfg,
							  bus_flags);
		if (!common_flags) {
			dev_warn(icd->parent,
				 "Flags incompatible: camera 0x%x, host 0x%lx\n",
				 cfg.flags, bus_flags);
			return -EINVAL;
		}
	} else if (ret == -ENOIOCTLCMD) {
		ret = 0;
	}
1224

1225
	return ret;
1226 1227
}

1228
static const struct soc_mbus_pixelfmt pxa_camera_formats[] = {
1229
	{
1230 1231 1232 1233 1234
		.fourcc			= V4L2_PIX_FMT_YUV422P,
		.name			= "Planar YUV422 16 bit",
		.bits_per_sample	= 8,
		.packing		= SOC_MBUS_PACKING_2X8_PADHI,
		.order			= SOC_MBUS_ORDER_LE,
1235
		.layout			= SOC_MBUS_LAYOUT_PLANAR_2Y_U_V,
1236 1237 1238
	},
};

1239 1240
/* This will be corrected as we get more formats */
static bool pxa_camera_packing_supported(const struct soc_mbus_pixelfmt *fmt)
1241
{
1242 1243 1244 1245 1246
	return	fmt->packing == SOC_MBUS_PACKING_NONE ||
		(fmt->bits_per_sample == 8 &&
		 fmt->packing == SOC_MBUS_PACKING_2X8_PADHI) ||
		(fmt->bits_per_sample > 8 &&
		 fmt->packing == SOC_MBUS_PACKING_EXTEND16);
1247 1248
}

1249
static int pxa_camera_get_formats(struct soc_camera_device *icd, unsigned int idx,
1250 1251
				  struct soc_camera_format_xlate *xlate)
{
1252
	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1253
	struct device *dev = icd->parent;
1254
	int formats = 0, ret;
1255
	struct pxa_cam *cam;
1256
	u32 code;
1257
	const struct soc_mbus_pixelfmt *fmt;
1258

1259 1260 1261 1262
	ret = v4l2_subdev_call(sd, video, enum_mbus_fmt, idx, &code);
	if (ret < 0)
		/* No more formats */
		return 0;
1263

1264 1265
	fmt = soc_mbus_get_fmtdesc(code);
	if (!fmt) {
1266
		dev_err(dev, "Invalid format code #%u: %d\n", idx, code);
1267
		return 0;
1268
	}
1269

1270 1271
	/* This also checks support for the requested bits-per-sample */
	ret = pxa_camera_try_bus_param(icd, fmt->bits_per_sample);
1272 1273 1274
	if (ret < 0)
		return 0;

1275 1276 1277 1278 1279 1280 1281 1282 1283 1284
	if (!icd->host_priv) {
		cam = kzalloc(sizeof(*cam), GFP_KERNEL);
		if (!cam)
			return -ENOMEM;

		icd->host_priv = cam;
	} else {
		cam = icd->host_priv;
	}

1285
	switch (code) {
1286
	case MEDIA_BUS_FMT_UYVY8_2X8:
1287 1288
		formats++;
		if (xlate) {
1289 1290
			xlate->host_fmt	= &pxa_camera_formats[0];
			xlate->code	= code;
1291
			xlate++;
1292 1293
			dev_dbg(dev, "Providing format %s using code %d\n",
				pxa_camera_formats[0].name, code);
1294
		}
1295 1296 1297 1298 1299
	case MEDIA_BUS_FMT_VYUY8_2X8:
	case MEDIA_BUS_FMT_YUYV8_2X8:
	case MEDIA_BUS_FMT_YVYU8_2X8:
	case MEDIA_BUS_FMT_RGB565_2X8_LE:
	case MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE:
1300
		if (xlate)
1301
			dev_dbg(dev, "Providing format %s packed\n",
1302
				fmt->name);
1303 1304
		break;
	default:
1305 1306 1307
		if (!pxa_camera_packing_supported(fmt))
			return 0;
		if (xlate)
1308
			dev_dbg(dev,
1309
				"Providing format %s in pass-through mode\n",
1310 1311 1312 1313 1314 1315 1316 1317 1318
				fmt->name);
	}

	/* Generic pass-through */
	formats++;
	if (xlate) {
		xlate->host_fmt	= fmt;
		xlate->code	= code;
		xlate++;
1319 1320 1321 1322 1323
	}

	return formats;
}

1324 1325 1326 1327 1328 1329
static void pxa_camera_put_formats(struct soc_camera_device *icd)
{
	kfree(icd->host_priv);
	icd->host_priv = NULL;
}

1330
static int pxa_camera_check_frame(u32 width, u32 height)
1331 1332
{
	/* limit to pxa hardware capabilities */
1333 1334
	return height < 32 || height > 2048 || width < 48 || width > 2048 ||
		(width & 0x01);
1335 1336
}

1337
static int pxa_camera_set_crop(struct soc_camera_device *icd,
1338
			       const struct v4l2_crop *a)
1339
{
1340
	const struct v4l2_rect *rect = &a->c;
1341 1342
	struct device *dev = icd->parent;
	struct soc_camera_host *ici = to_soc_camera_host(dev);
1343
	struct pxa_camera_dev *pcdev = ici->priv;
1344
	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1345 1346 1347 1348
	struct soc_camera_sense sense = {
		.master_clock = pcdev->mclk,
		.pixel_clock_max = pcdev->ciclk / 4,
	};
1349
	struct v4l2_mbus_framefmt mf;
1350
	struct pxa_cam *cam = icd->host_priv;
1351
	u32 fourcc = icd->current_fmt->host_fmt->fourcc;
1352 1353 1354 1355 1356 1357
	int ret;

	/* If PCLK is used to latch data from the sensor, check sense */
	if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN)
		icd->sense = &sense;

1358
	ret = v4l2_subdev_call(sd, video, s_crop, a);
1359 1360 1361 1362

	icd->sense = NULL;

	if (ret < 0) {
1363
		dev_warn(dev, "Failed to crop to %ux%u@%u:%u\n",
1364
			 rect->width, rect->height, rect->left, rect->top);
1365 1366 1367
		return ret;
	}

1368
	ret = v4l2_subdev_call(sd, video, g_mbus_fmt, &mf);
1369 1370 1371
	if (ret < 0)
		return ret;

1372
	if (pxa_camera_check_frame(mf.width, mf.height)) {
1373 1374 1375 1376
		/*
		 * Camera cropping produced a frame beyond our capabilities.
		 * FIXME: just extract a subframe, that we can process.
		 */
1377 1378 1379 1380
		v4l_bound_align_image(&mf.width, 48, 2048, 1,
			&mf.height, 32, 2048, 0,
			fourcc == V4L2_PIX_FMT_YUV422P ? 4 : 0);
		ret = v4l2_subdev_call(sd, video, s_mbus_fmt, &mf);
1381 1382 1383
		if (ret < 0)
			return ret;

1384
		if (pxa_camera_check_frame(mf.width, mf.height)) {
1385
			dev_warn(icd->parent,
1386 1387 1388 1389 1390 1391
				 "Inconsistent state. Use S_FMT to repair\n");
			return -EINVAL;
		}
	}

	if (sense.flags & SOCAM_SENSE_PCLK_CHANGED) {
1392
		if (sense.pixel_clock > sense.pixel_clock_max) {
1393
			dev_err(dev,
1394 1395 1396 1397 1398 1399 1400
				"pixel clock %lu set by the camera too high!",
				sense.pixel_clock);
			return -EIO;
		}
		recalculate_fifo_timeout(pcdev, sense.pixel_clock);
	}

1401 1402
	icd->user_width		= mf.width;
	icd->user_height	= mf.height;
1403

1404
	pxa_camera_setup_cicr(icd, cam->flags, fourcc);
1405

1406 1407 1408
	return ret;
}

1409
static int pxa_camera_set_fmt(struct soc_camera_device *icd,
1410
			      struct v4l2_format *f)
1411
{
1412 1413
	struct device *dev = icd->parent;
	struct soc_camera_host *ici = to_soc_camera_host(dev);
1414
	struct pxa_camera_dev *pcdev = ici->priv;
1415
	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1416
	const struct soc_camera_format_xlate *xlate = NULL;
1417 1418 1419 1420
	struct soc_camera_sense sense = {
		.master_clock = pcdev->mclk,
		.pixel_clock_max = pcdev->ciclk / 4,
	};
1421
	struct v4l2_pix_format *pix = &f->fmt.pix;
1422
	struct v4l2_mbus_framefmt mf;
1423
	int ret;
1424

1425 1426
	xlate = soc_camera_xlate_by_fourcc(icd, pix->pixelformat);
	if (!xlate) {
1427
		dev_warn(dev, "Format %x not found\n", pix->pixelformat);
1428
		return -EINVAL;
1429
	}
1430

1431 1432
	/* If PCLK is used to latch data from the sensor, check sense */
	if (pcdev->platform_flags & PXA_CAMERA_PCLK_EN)
1433
		/* The caller holds a mutex. */
1434 1435
		icd->sense = &sense;

1436 1437 1438 1439 1440 1441 1442 1443 1444 1445
	mf.width	= pix->width;
	mf.height	= pix->height;
	mf.field	= pix->field;
	mf.colorspace	= pix->colorspace;
	mf.code		= xlate->code;

	ret = v4l2_subdev_call(sd, video, s_mbus_fmt, &mf);

	if (mf.code != xlate->code)
		return -EINVAL;
1446

1447 1448 1449
	icd->sense = NULL;

	if (ret < 0) {
1450
		dev_warn(dev, "Failed to configure for format %x\n",
1451
			 pix->pixelformat);
1452
	} else if (pxa_camera_check_frame(mf.width, mf.height)) {
1453 1454
		dev_warn(dev,
			 "Camera driver produced an unsupported frame %dx%d\n",
1455
			 mf.width, mf.height);
1456
		ret = -EINVAL;
1457 1458
	} else if (sense.flags & SOCAM_SENSE_PCLK_CHANGED) {
		if (sense.pixel_clock > sense.pixel_clock_max) {
1459
			dev_err(dev,
1460 1461 1462 1463 1464 1465
				"pixel clock %lu set by the camera too high!",
				sense.pixel_clock);
			return -EIO;
		}
		recalculate_fifo_timeout(pcdev, sense.pixel_clock);
	}
1466

1467 1468 1469 1470 1471 1472 1473 1474
	if (ret < 0)
		return ret;

	pix->width		= mf.width;
	pix->height		= mf.height;
	pix->field		= mf.field;
	pix->colorspace		= mf.colorspace;
	icd->current_fmt	= xlate;
1475 1476

	return ret;
1477 1478
}

1479 1480
static int pxa_camera_try_fmt(struct soc_camera_device *icd,
			      struct v4l2_format *f)
1481
{
1482
	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1483 1484
	const struct soc_camera_format_xlate *xlate;
	struct v4l2_pix_format *pix = &f->fmt.pix;
1485
	struct v4l2_mbus_framefmt mf;
1486
	__u32 pixfmt = pix->pixelformat;
1487
	int ret;
1488

1489 1490
	xlate = soc_camera_xlate_by_fourcc(icd, pixfmt);
	if (!xlate) {
1491
		dev_warn(icd->parent, "Format %x not found\n", pixfmt);
1492
		return -EINVAL;
1493
	}
1494

1495
	/*
1496 1497 1498 1499
	 * Limit to pxa hardware capabilities.  YUV422P planar format requires
	 * images size to be a multiple of 16 bytes.  If not, zeros will be
	 * inserted between Y and U planes, and U and V planes, which violates
	 * the YUV422P standard.
1500
	 */
1501 1502
	v4l_bound_align_image(&pix->width, 48, 2048, 1,
			      &pix->height, 32, 2048, 0,
1503
			      pixfmt == V4L2_PIX_FMT_YUV422P ? 4 : 0);
1504

1505
	/* limit to sensor capabilities */
1506 1507
	mf.width	= pix->width;
	mf.height	= pix->height;
1508 1509
	/* Only progressive video supported so far */
	mf.field	= V4L2_FIELD_NONE;
1510 1511
	mf.colorspace	= pix->colorspace;
	mf.code		= xlate->code;
1512

1513 1514 1515
	ret = v4l2_subdev_call(sd, video, try_mbus_fmt, &mf);
	if (ret < 0)
		return ret;
1516

1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527
	pix->width	= mf.width;
	pix->height	= mf.height;
	pix->colorspace	= mf.colorspace;

	switch (mf.field) {
	case V4L2_FIELD_ANY:
	case V4L2_FIELD_NONE:
		pix->field	= V4L2_FIELD_NONE;
		break;
	default:
		/* TODO: support interlaced at least in pass-through mode */
1528
		dev_err(icd->parent, "Field type %d unsupported.\n",
1529
			mf.field);
1530 1531 1532
		return -EINVAL;
	}

1533
	return ret;
1534 1535
}

1536
static int pxa_camera_reqbufs(struct soc_camera_device *icd,
1537
			      struct v4l2_requestbuffers *p)
1538 1539 1540
{
	int i;

1541 1542
	/*
	 * This is for locking debugging only. I removed spinlocks and now I
1543 1544
	 * check whether .prepare is ever called on a linked buffer, or whether
	 * a dma IRQ can occur for an in-work or unlinked buffer. Until now
1545 1546
	 * it hadn't triggered
	 */
1547
	for (i = 0; i < p->count; i++) {
1548
		struct pxa_buffer *buf = container_of(icd->vb_vidq.bufs[i],
1549 1550 1551 1552 1553 1554 1555 1556
						      struct pxa_buffer, vb);
		buf->inwork = 0;
		INIT_LIST_HEAD(&buf->vb.queue);
	}

	return 0;
}

1557
static unsigned int pxa_camera_poll(struct file *file, poll_table *pt)
1558
{
1559
	struct soc_camera_device *icd = file->private_data;
1560 1561
	struct pxa_buffer *buf;

1562
	buf = list_entry(icd->vb_vidq.stream.next, struct pxa_buffer,
1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573
			 vb.stream);

	poll_wait(file, &buf->vb.done, pt);

	if (buf->vb.state == VIDEOBUF_DONE ||
	    buf->vb.state == VIDEOBUF_ERROR)
		return POLLIN|POLLRDNORM;

	return 0;
}

1574 1575
static int pxa_camera_querycap(struct soc_camera_host *ici,
			       struct v4l2_capability *cap)
1576 1577 1578
{
	/* cap->name is set by the firendly caller:-> */
	strlcpy(cap->card, pxa_cam_driver_description, sizeof(cap->card));
1579 1580
	cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
	cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
1581 1582 1583 1584

	return 0;
}

1585
static int pxa_camera_suspend(struct device *dev)
1586
{
1587
	struct soc_camera_host *ici = to_soc_camera_host(dev);
1588 1589 1590
	struct pxa_camera_dev *pcdev = ici->priv;
	int i = 0, ret = 0;

1591 1592 1593 1594 1595
	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR0);
	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR1);
	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR2);
	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR3);
	pcdev->save_cicr[i++] = __raw_readl(pcdev->base + CICR4);
1596

1597 1598
	if (pcdev->soc_host.icd) {
		struct v4l2_subdev *sd = soc_camera_to_subdev(pcdev->soc_host.icd);
1599 1600 1601 1602
		ret = v4l2_subdev_call(sd, core, s_power, 0);
		if (ret == -ENOIOCTLCMD)
			ret = 0;
	}
1603 1604 1605 1606

	return ret;
}

1607
static int pxa_camera_resume(struct device *dev)
1608
{
1609
	struct soc_camera_host *ici = to_soc_camera_host(dev);
1610 1611 1612
	struct pxa_camera_dev *pcdev = ici->priv;
	int i = 0, ret = 0;

1613 1614 1615
	DRCMR(68) = pcdev->dma_chans[0] | DRCMR_MAPVLD;
	DRCMR(69) = pcdev->dma_chans[1] | DRCMR_MAPVLD;
	DRCMR(70) = pcdev->dma_chans[2] | DRCMR_MAPVLD;
1616

1617 1618 1619 1620 1621
	__raw_writel(pcdev->save_cicr[i++] & ~CICR0_ENB, pcdev->base + CICR0);
	__raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR1);
	__raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR2);
	__raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR3);
	__raw_writel(pcdev->save_cicr[i++], pcdev->base + CICR4);
1622

1623 1624
	if (pcdev->soc_host.icd) {
		struct v4l2_subdev *sd = soc_camera_to_subdev(pcdev->soc_host.icd);
1625 1626 1627 1628
		ret = v4l2_subdev_call(sd, core, s_power, 1);
		if (ret == -ENOIOCTLCMD)
			ret = 0;
	}
1629 1630

	/* Restart frame capture if active buffer exists */
1631 1632
	if (!ret && pcdev->active)
		pxa_camera_start_capture(pcdev);
1633 1634 1635 1636

	return ret;
}

1637 1638 1639 1640
static struct soc_camera_host_ops pxa_soc_camera_host_ops = {
	.owner		= THIS_MODULE,
	.add		= pxa_camera_add_device,
	.remove		= pxa_camera_remove_device,
1641 1642
	.clock_start	= pxa_camera_clock_start,
	.clock_stop	= pxa_camera_clock_stop,
1643
	.set_crop	= pxa_camera_set_crop,
1644
	.get_formats	= pxa_camera_get_formats,
1645
	.put_formats	= pxa_camera_put_formats,
1646 1647
	.set_fmt	= pxa_camera_set_fmt,
	.try_fmt	= pxa_camera_try_fmt,
1648
	.init_videobuf	= pxa_camera_init_videobuf,
1649 1650 1651 1652 1653 1654
	.reqbufs	= pxa_camera_reqbufs,
	.poll		= pxa_camera_poll,
	.querycap	= pxa_camera_querycap,
	.set_bus_param	= pxa_camera_set_bus_param,
};

1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697
static int pxa_camera_pdata_from_dt(struct device *dev,
				    struct pxa_camera_dev *pcdev)
{
	u32 mclk_rate;
	struct device_node *np = dev->of_node;
	struct v4l2_of_endpoint ep;
	int err = of_property_read_u32(np, "clock-frequency",
				       &mclk_rate);
	if (!err) {
		pcdev->platform_flags |= PXA_CAMERA_MCLK_EN;
		pcdev->mclk = mclk_rate;
	}

	np = of_graph_get_next_endpoint(np, NULL);
	if (!np) {
		dev_err(dev, "could not find endpoint\n");
		return -EINVAL;
	}

	err = v4l2_of_parse_endpoint(np, &ep);
	if (err) {
		dev_err(dev, "could not parse endpoint\n");
		goto out;
	}

	switch (ep.bus.parallel.bus_width) {
	case 4:
		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_4;
		break;
	case 5:
		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_5;
		break;
	case 8:
		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_8;
		break;
	case 9:
		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_9;
		break;
	case 10:
		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_10;
		break;
	default:
		break;
1698
	}
1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716

	if (ep.bus.parallel.flags & V4L2_MBUS_MASTER)
		pcdev->platform_flags |= PXA_CAMERA_MASTER;
	if (ep.bus.parallel.flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH)
		pcdev->platform_flags |= PXA_CAMERA_HSP;
	if (ep.bus.parallel.flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH)
		pcdev->platform_flags |= PXA_CAMERA_VSP;
	if (ep.bus.parallel.flags & V4L2_MBUS_PCLK_SAMPLE_RISING)
		pcdev->platform_flags |= PXA_CAMERA_PCLK_EN | PXA_CAMERA_PCP;
	if (ep.bus.parallel.flags & V4L2_MBUS_PCLK_SAMPLE_FALLING)
		pcdev->platform_flags |= PXA_CAMERA_PCLK_EN;

out:
	of_node_put(np);

	return err;
}

1717
static int pxa_camera_probe(struct platform_device *pdev)
1718 1719 1720 1721
{
	struct pxa_camera_dev *pcdev;
	struct resource *res;
	void __iomem *base;
1722
	int irq;
1723 1724 1725 1726
	int err = 0;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	irq = platform_get_irq(pdev, 0);
1727 1728
	if (!res || irq < 0)
		return -ENODEV;
1729

1730
	pcdev = devm_kzalloc(&pdev->dev, sizeof(*pcdev), GFP_KERNEL);
1731
	if (!pcdev) {
1732
		dev_err(&pdev->dev, "Could not allocate pcdev\n");
1733
		return -ENOMEM;
1734 1735
	}

1736 1737 1738
	pcdev->clk = devm_clk_get(&pdev->dev, NULL);
	if (IS_ERR(pcdev->clk))
		return PTR_ERR(pcdev->clk);
1739 1740 1741 1742

	pcdev->res = res;

	pcdev->pdata = pdev->dev.platform_data;
1743 1744 1745 1746 1747 1748 1749 1750 1751
	if (&pdev->dev.of_node && !pcdev->pdata) {
		err = pxa_camera_pdata_from_dt(&pdev->dev, pcdev);
	} else {
		pcdev->platform_flags = pcdev->pdata->flags;
		pcdev->mclk = pcdev->pdata->mclk_10khz * 10000;
	}
	if (err < 0)
		return err;

1752 1753
	if (!(pcdev->platform_flags & (PXA_CAMERA_DATAWIDTH_8 |
			PXA_CAMERA_DATAWIDTH_9 | PXA_CAMERA_DATAWIDTH_10))) {
1754 1755 1756 1757
		/*
		 * Platform hasn't set available data widths. This is bad.
		 * Warn and use a default.
		 */
1758 1759 1760 1761
		dev_warn(&pdev->dev, "WARNING! Platform hasn't set available "
			 "data widths, using default 10 bit\n");
		pcdev->platform_flags |= PXA_CAMERA_DATAWIDTH_10;
	}
1762 1763 1764 1765 1766 1767
	if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_8)
		pcdev->width_flags = 1 << 7;
	if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_9)
		pcdev->width_flags |= 1 << 8;
	if (pcdev->platform_flags & PXA_CAMERA_DATAWIDTH_10)
		pcdev->width_flags |= 1 << 9;
1768
	if (!pcdev->mclk) {
1769
		dev_warn(&pdev->dev,
1770
			 "mclk == 0! Please, fix your platform data. "
1771
			 "Using default 20MHz\n");
1772
		pcdev->mclk = 20000000;
1773 1774
	}

1775
	pcdev->mclk_divisor = mclk_get_divisor(pdev, pcdev);
1776

1777 1778 1779 1780 1781 1782
	INIT_LIST_HEAD(&pcdev->capture);
	spin_lock_init(&pcdev->lock);

	/*
	 * Request the regions.
	 */
1783 1784 1785 1786
	base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(base))
		return PTR_ERR(base);

1787 1788 1789 1790
	pcdev->irq = irq;
	pcdev->base = base;

	/* request dma */
1791 1792 1793
	err = pxa_request_dma("CI_Y", DMA_PRIO_HIGH,
			      pxa_camera_dma_irq_y, pcdev);
	if (err < 0) {
1794
		dev_err(&pdev->dev, "Can't request DMA for Y\n");
1795
		return err;
1796
	}
1797
	pcdev->dma_chans[0] = err;
1798
	dev_dbg(&pdev->dev, "got DMA channel %d\n", pcdev->dma_chans[0]);
1799

1800 1801 1802
	err = pxa_request_dma("CI_U", DMA_PRIO_HIGH,
			      pxa_camera_dma_irq_u, pcdev);
	if (err < 0) {
1803
		dev_err(&pdev->dev, "Can't request DMA for U\n");
1804 1805
		goto exit_free_dma_y;
	}
1806
	pcdev->dma_chans[1] = err;
1807
	dev_dbg(&pdev->dev, "got DMA channel (U) %d\n", pcdev->dma_chans[1]);
1808

1809 1810 1811
	err = pxa_request_dma("CI_V", DMA_PRIO_HIGH,
			      pxa_camera_dma_irq_v, pcdev);
	if (err < 0) {
1812
		dev_err(&pdev->dev, "Can't request DMA for V\n");
1813 1814
		goto exit_free_dma_u;
	}
1815
	pcdev->dma_chans[2] = err;
1816
	dev_dbg(&pdev->dev, "got DMA channel (V) %d\n", pcdev->dma_chans[2]);
1817

1818 1819 1820
	DRCMR(68) = pcdev->dma_chans[0] | DRCMR_MAPVLD;
	DRCMR(69) = pcdev->dma_chans[1] | DRCMR_MAPVLD;
	DRCMR(70) = pcdev->dma_chans[2] | DRCMR_MAPVLD;
1821 1822

	/* request irq */
1823 1824
	err = devm_request_irq(&pdev->dev, pcdev->irq, pxa_camera_irq, 0,
			       PXA_CAM_DRV_NAME, pcdev);
1825
	if (err) {
1826
		dev_err(&pdev->dev, "Camera interrupt register failed\n");
1827 1828 1829
		goto exit_free_dma;
	}

1830 1831 1832
	pcdev->soc_host.drv_name	= PXA_CAM_DRV_NAME;
	pcdev->soc_host.ops		= &pxa_soc_camera_host_ops;
	pcdev->soc_host.priv		= pcdev;
1833
	pcdev->soc_host.v4l2_dev.dev	= &pdev->dev;
1834
	pcdev->soc_host.nr		= pdev->id;
1835

1836
	err = soc_camera_host_register(&pcdev->soc_host);
1837
	if (err)
1838
		goto exit_free_dma;
1839 1840 1841 1842

	return 0;

exit_free_dma:
1843 1844 1845 1846 1847
	pxa_free_dma(pcdev->dma_chans[2]);
exit_free_dma_u:
	pxa_free_dma(pcdev->dma_chans[1]);
exit_free_dma_y:
	pxa_free_dma(pcdev->dma_chans[0]);
1848 1849 1850
	return err;
}

1851
static int pxa_camera_remove(struct platform_device *pdev)
1852
{
1853 1854 1855
	struct soc_camera_host *soc_host = to_soc_camera_host(&pdev->dev);
	struct pxa_camera_dev *pcdev = container_of(soc_host,
					struct pxa_camera_dev, soc_host);
1856

1857 1858 1859
	pxa_free_dma(pcdev->dma_chans[0]);
	pxa_free_dma(pcdev->dma_chans[1]);
	pxa_free_dma(pcdev->dma_chans[2]);
1860

1861
	soc_camera_host_unregister(soc_host);
1862

1863
	dev_info(&pdev->dev, "PXA Camera driver unloaded\n");
1864 1865 1866 1867

	return 0;
}

1868
static const struct dev_pm_ops pxa_camera_pm = {
1869 1870 1871 1872
	.suspend	= pxa_camera_suspend,
	.resume		= pxa_camera_resume,
};

1873 1874 1875 1876 1877 1878
static const struct of_device_id pxa_camera_of_match[] = {
	{ .compatible = "marvell,pxa270-qci", },
	{},
};
MODULE_DEVICE_TABLE(of, pxa_camera_of_match);

1879
static struct platform_driver pxa_camera_driver = {
1880
	.driver		= {
1881
		.name	= PXA_CAM_DRV_NAME,
1882
		.pm	= &pxa_camera_pm,
1883
		.of_match_table = of_match_ptr(pxa_camera_of_match),
1884 1885
	},
	.probe		= pxa_camera_probe,
1886
	.remove		= pxa_camera_remove,
1887 1888
};

1889
module_platform_driver(pxa_camera_driver);
1890 1891 1892 1893

MODULE_DESCRIPTION("PXA27x SoC Camera Host driver");
MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
MODULE_LICENSE("GPL");
1894
MODULE_VERSION(PXA_CAM_VERSION);
1895
MODULE_ALIAS("platform:" PXA_CAM_DRV_NAME);