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);