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