hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/i2c/maxim4c/maxim4c_v4l2.c
....@@ -532,6 +532,11 @@
532532 if (maxim4c->hot_plug_irq > 0)
533533 enable_irq(maxim4c->hot_plug_irq);
534534
535
+ if (maxim4c->link_lock_state != maxim4c->gmsl_link.link_enable_mask) {
536
+ dev_info(dev, "partial links are locked, start hot plug detect work.\n");
537
+ maxim4c_hot_plug_detect_work_start(maxim4c);
538
+ }
539
+
535540 return 0;
536541 }
537542
....@@ -589,21 +594,20 @@
589594 goto unlock_and_return;
590595
591596 if (on) {
592
- ret = pm_runtime_get_sync(&client->dev);
593
- if (ret < 0) {
594
- pm_runtime_put_noidle(&client->dev);
597
+ ret = pm_runtime_resume_and_get(&client->dev);
598
+ if (ret < 0)
595599 goto unlock_and_return;
596
- }
597600
598601 ret = __maxim4c_start_stream(maxim4c);
599602 if (ret) {
600603 v4l2_err(sd, "start stream failed while write regs\n");
601
- pm_runtime_put(&client->dev);
604
+ pm_runtime_put_sync(&client->dev);
602605 goto unlock_and_return;
603606 }
604607 } else {
605608 __maxim4c_stop_stream(maxim4c);
606
- pm_runtime_put(&client->dev);
609
+ pm_runtime_mark_last_busy(&client->dev);
610
+ pm_runtime_put_autosuspend(&client->dev);
607611 }
608612
609613 maxim4c->streaming = on;
....@@ -787,21 +791,9 @@
787791
788792 val |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
789793 val |= (1 << (data_lanes - 1));
790
- switch (data_lanes) {
791
- case 4:
792
- val |= V4L2_MBUS_CSI2_CHANNEL_3;
793
- fallthrough;
794
- case 3:
795
- val |= V4L2_MBUS_CSI2_CHANNEL_2;
796
- fallthrough;
797
- case 2:
798
- val |= V4L2_MBUS_CSI2_CHANNEL_1;
799
- fallthrough;
800
- case 1:
801
- default:
802
- val |= V4L2_MBUS_CSI2_CHANNEL_0;
803
- break;
804
- }
794
+
795
+ val |= V4L2_MBUS_CSI2_CHANNEL_3 | V4L2_MBUS_CSI2_CHANNEL_2 |
796
+ V4L2_MBUS_CSI2_CHANNEL_1 | V4L2_MBUS_CSI2_CHANNEL_0;
805797
806798 config->type = V4L2_MBUS_CSI2_DPHY;
807799 config->flags = val;