.. | .. |
---|
532 | 532 | if (maxim4c->hot_plug_irq > 0) |
---|
533 | 533 | enable_irq(maxim4c->hot_plug_irq); |
---|
534 | 534 | |
---|
| 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 | + |
---|
535 | 540 | return 0; |
---|
536 | 541 | } |
---|
537 | 542 | |
---|
.. | .. |
---|
589 | 594 | goto unlock_and_return; |
---|
590 | 595 | |
---|
591 | 596 | 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) |
---|
595 | 599 | goto unlock_and_return; |
---|
596 | | - } |
---|
597 | 600 | |
---|
598 | 601 | ret = __maxim4c_start_stream(maxim4c); |
---|
599 | 602 | if (ret) { |
---|
600 | 603 | v4l2_err(sd, "start stream failed while write regs\n"); |
---|
601 | | - pm_runtime_put(&client->dev); |
---|
| 604 | + pm_runtime_put_sync(&client->dev); |
---|
602 | 605 | goto unlock_and_return; |
---|
603 | 606 | } |
---|
604 | 607 | } else { |
---|
605 | 608 | __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); |
---|
607 | 611 | } |
---|
608 | 612 | |
---|
609 | 613 | maxim4c->streaming = on; |
---|
.. | .. |
---|
787 | 791 | |
---|
788 | 792 | val |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK; |
---|
789 | 793 | 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; |
---|
805 | 797 | |
---|
806 | 798 | config->type = V4L2_MBUS_CSI2_DPHY; |
---|
807 | 799 | config->flags = val; |
---|