Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: rkisp1: Make the internal CSI-2 receiver optional

Not all ISP versions integrate a MIPI CSI-2 receiver.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Dafna Hirschfeld <dafna@fastmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>

authored by

Laurent Pinchart and committed by
Mauro Carvalho Chehab
7d4f126f f1b8f171

+34 -16
+34 -16
drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
··· 205 205 206 206 switch (reg) { 207 207 case 0: 208 + /* MIPI CSI-2 port */ 209 + if (!(rkisp1->info->features & RKISP1_FEATURE_MIPI_CSI2)) { 210 + dev_err(rkisp1->dev, 211 + "internal CSI must be available for port 0\n"); 212 + ret = -EINVAL; 213 + break; 214 + } 215 + 208 216 vep.bus_type = V4L2_MBUS_CSI2_DPHY; 209 217 break; 210 218 ··· 338 330 unsigned int i; 339 331 int ret; 340 332 341 - /* Link the CSI receiver to the ISP. */ 342 - ret = media_create_pad_link(&rkisp1->csi.sd.entity, RKISP1_CSI_PAD_SRC, 343 - &rkisp1->isp.sd.entity, 344 - RKISP1_ISP_PAD_SINK_VIDEO, 345 - MEDIA_LNK_FL_ENABLED); 346 - if (ret) 347 - return ret; 333 + if (rkisp1->info->features & RKISP1_FEATURE_MIPI_CSI2) { 334 + /* Link the CSI receiver to the ISP. */ 335 + ret = media_create_pad_link(&rkisp1->csi.sd.entity, 336 + RKISP1_CSI_PAD_SRC, 337 + &rkisp1->isp.sd.entity, 338 + RKISP1_ISP_PAD_SINK_VIDEO, 339 + MEDIA_LNK_FL_ENABLED); 340 + if (ret) 341 + return ret; 342 + } 348 343 349 344 /* create ISP->RSZ->CAP links */ 350 345 for (i = 0; i < 2; i++) { ··· 390 379 391 380 static void rkisp1_entities_unregister(struct rkisp1_device *rkisp1) 392 381 { 393 - rkisp1_csi_unregister(rkisp1); 382 + if (rkisp1->info->features & RKISP1_FEATURE_MIPI_CSI2) 383 + rkisp1_csi_unregister(rkisp1); 394 384 rkisp1_params_unregister(rkisp1); 395 385 rkisp1_stats_unregister(rkisp1); 396 386 rkisp1_capture_devs_unregister(rkisp1); ··· 423 411 if (ret) 424 412 goto error; 425 413 426 - ret = rkisp1_csi_register(rkisp1); 427 - if (ret) 428 - goto error; 414 + if (rkisp1->info->features & RKISP1_FEATURE_MIPI_CSI2) { 415 + ret = rkisp1_csi_register(rkisp1); 416 + if (ret) 417 + goto error; 418 + } 429 419 430 420 ret = rkisp1_create_links(rkisp1); 431 421 if (ret) ··· 590 576 goto err_unreg_v4l2_dev; 591 577 } 592 578 593 - ret = rkisp1_csi_init(rkisp1); 594 - if (ret) 595 - goto err_unreg_media_dev; 579 + if (rkisp1->info->features & RKISP1_FEATURE_MIPI_CSI2) { 580 + ret = rkisp1_csi_init(rkisp1); 581 + if (ret) 582 + goto err_unreg_media_dev; 583 + } 596 584 597 585 ret = rkisp1_entities_register(rkisp1); 598 586 if (ret) ··· 611 595 err_unreg_entities: 612 596 rkisp1_entities_unregister(rkisp1); 613 597 err_cleanup_csi: 614 - rkisp1_csi_cleanup(rkisp1); 598 + if (rkisp1->info->features & RKISP1_FEATURE_MIPI_CSI2) 599 + rkisp1_csi_cleanup(rkisp1); 615 600 err_unreg_media_dev: 616 601 media_device_unregister(&rkisp1->media_dev); 617 602 err_unreg_v4l2_dev: ··· 630 613 v4l2_async_nf_cleanup(&rkisp1->notifier); 631 614 632 615 rkisp1_entities_unregister(rkisp1); 633 - rkisp1_csi_cleanup(rkisp1); 616 + if (rkisp1->info->features & RKISP1_FEATURE_MIPI_CSI2) 617 + rkisp1_csi_cleanup(rkisp1); 634 618 rkisp1_debug_cleanup(rkisp1); 635 619 636 620 media_device_unregister(&rkisp1->media_dev);