diff options
author | David S. Miller <davem@davemloft.net> | 2016-06-30 05:03:36 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-06-30 05:03:36 -0400 |
commit | ee58b57100ca953da7320c285315a95db2f7053d (patch) | |
tree | 77b815a31240adc4d6326346908137fc6c2c3a96 /drivers/phy | |
parent | 6f30e8b022c8e3a722928ddb1a2ae0be852fcc0e (diff) | |
parent | e7bdea7750eb2a64aea4a08fa5c0a31719c8155d (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Several cases of overlapping changes, except the packet scheduler
conflicts which deal with the addition of the free list parameter
to qdisc_enqueue().
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/phy')
-rw-r--r-- | drivers/phy/phy-exynos-mipi-video.c | 6 | ||||
-rw-r--r-- | drivers/phy/phy-ti-pipe3.c | 15 | ||||
-rw-r--r-- | drivers/phy/phy-twl4030-usb.c | 14 |
3 files changed, 26 insertions, 9 deletions
diff --git a/drivers/phy/phy-exynos-mipi-video.c b/drivers/phy/phy-exynos-mipi-video.c index cc093ebfda94..8b851f718123 100644 --- a/drivers/phy/phy-exynos-mipi-video.c +++ b/drivers/phy/phy-exynos-mipi-video.c | |||
@@ -233,8 +233,12 @@ static inline int __is_running(const struct exynos_mipi_phy_desc *data, | |||
233 | struct exynos_mipi_video_phy *state) | 233 | struct exynos_mipi_video_phy *state) |
234 | { | 234 | { |
235 | u32 val; | 235 | u32 val; |
236 | int ret; | ||
237 | |||
238 | ret = regmap_read(state->regmaps[data->resetn_map], data->resetn_reg, &val); | ||
239 | if (ret) | ||
240 | return 0; | ||
236 | 241 | ||
237 | regmap_read(state->regmaps[data->resetn_map], data->resetn_reg, &val); | ||
238 | return val & data->resetn_val; | 242 | return val & data->resetn_val; |
239 | } | 243 | } |
240 | 244 | ||
diff --git a/drivers/phy/phy-ti-pipe3.c b/drivers/phy/phy-ti-pipe3.c index 0a477d24cf76..bf46844dc387 100644 --- a/drivers/phy/phy-ti-pipe3.c +++ b/drivers/phy/phy-ti-pipe3.c | |||
@@ -293,11 +293,18 @@ static int ti_pipe3_init(struct phy *x) | |||
293 | ret = ti_pipe3_dpll_wait_lock(phy); | 293 | ret = ti_pipe3_dpll_wait_lock(phy); |
294 | } | 294 | } |
295 | 295 | ||
296 | /* Program the DPLL only if not locked */ | 296 | /* SATA has issues if re-programmed when locked */ |
297 | val = ti_pipe3_readl(phy->pll_ctrl_base, PLL_STATUS); | 297 | val = ti_pipe3_readl(phy->pll_ctrl_base, PLL_STATUS); |
298 | if (!(val & PLL_LOCK)) | 298 | if ((val & PLL_LOCK) && of_device_is_compatible(phy->dev->of_node, |
299 | if (ti_pipe3_dpll_program(phy)) | 299 | "ti,phy-pipe3-sata")) |
300 | return -EINVAL; | 300 | return ret; |
301 | |||
302 | /* Program the DPLL */ | ||
303 | ret = ti_pipe3_dpll_program(phy); | ||
304 | if (ret) { | ||
305 | ti_pipe3_disable_clocks(phy); | ||
306 | return -EINVAL; | ||
307 | } | ||
301 | 308 | ||
302 | return ret; | 309 | return ret; |
303 | } | 310 | } |
diff --git a/drivers/phy/phy-twl4030-usb.c b/drivers/phy/phy-twl4030-usb.c index 6b6af6cba454..d9b10a39a2cf 100644 --- a/drivers/phy/phy-twl4030-usb.c +++ b/drivers/phy/phy-twl4030-usb.c | |||
@@ -463,7 +463,8 @@ static int twl4030_phy_power_on(struct phy *phy) | |||
463 | twl4030_usb_set_mode(twl, twl->usb_mode); | 463 | twl4030_usb_set_mode(twl, twl->usb_mode); |
464 | if (twl->usb_mode == T2_USB_MODE_ULPI) | 464 | if (twl->usb_mode == T2_USB_MODE_ULPI) |
465 | twl4030_i2c_access(twl, 0); | 465 | twl4030_i2c_access(twl, 0); |
466 | schedule_delayed_work(&twl->id_workaround_work, 0); | 466 | twl->linkstat = MUSB_UNKNOWN; |
467 | schedule_delayed_work(&twl->id_workaround_work, HZ); | ||
467 | 468 | ||
468 | return 0; | 469 | return 0; |
469 | } | 470 | } |
@@ -537,6 +538,7 @@ static irqreturn_t twl4030_usb_irq(int irq, void *_twl) | |||
537 | struct twl4030_usb *twl = _twl; | 538 | struct twl4030_usb *twl = _twl; |
538 | enum musb_vbus_id_status status; | 539 | enum musb_vbus_id_status status; |
539 | bool status_changed = false; | 540 | bool status_changed = false; |
541 | int err; | ||
540 | 542 | ||
541 | status = twl4030_usb_linkstat(twl); | 543 | status = twl4030_usb_linkstat(twl); |
542 | 544 | ||
@@ -567,7 +569,9 @@ static irqreturn_t twl4030_usb_irq(int irq, void *_twl) | |||
567 | pm_runtime_mark_last_busy(twl->dev); | 569 | pm_runtime_mark_last_busy(twl->dev); |
568 | pm_runtime_put_autosuspend(twl->dev); | 570 | pm_runtime_put_autosuspend(twl->dev); |
569 | } | 571 | } |
570 | musb_mailbox(status); | 572 | err = musb_mailbox(status); |
573 | if (err) | ||
574 | twl->linkstat = MUSB_UNKNOWN; | ||
571 | } | 575 | } |
572 | 576 | ||
573 | /* don't schedule during sleep - irq works right then */ | 577 | /* don't schedule during sleep - irq works right then */ |
@@ -595,7 +599,8 @@ static int twl4030_phy_init(struct phy *phy) | |||
595 | struct twl4030_usb *twl = phy_get_drvdata(phy); | 599 | struct twl4030_usb *twl = phy_get_drvdata(phy); |
596 | 600 | ||
597 | pm_runtime_get_sync(twl->dev); | 601 | pm_runtime_get_sync(twl->dev); |
598 | schedule_delayed_work(&twl->id_workaround_work, 0); | 602 | twl->linkstat = MUSB_UNKNOWN; |
603 | schedule_delayed_work(&twl->id_workaround_work, HZ); | ||
599 | pm_runtime_mark_last_busy(twl->dev); | 604 | pm_runtime_mark_last_busy(twl->dev); |
600 | pm_runtime_put_autosuspend(twl->dev); | 605 | pm_runtime_put_autosuspend(twl->dev); |
601 | 606 | ||
@@ -763,7 +768,8 @@ static int twl4030_usb_remove(struct platform_device *pdev) | |||
763 | if (cable_present(twl->linkstat)) | 768 | if (cable_present(twl->linkstat)) |
764 | pm_runtime_put_noidle(twl->dev); | 769 | pm_runtime_put_noidle(twl->dev); |
765 | pm_runtime_mark_last_busy(twl->dev); | 770 | pm_runtime_mark_last_busy(twl->dev); |
766 | pm_runtime_put_sync_suspend(twl->dev); | 771 | pm_runtime_dont_use_autosuspend(&pdev->dev); |
772 | pm_runtime_put_sync(twl->dev); | ||
767 | pm_runtime_disable(twl->dev); | 773 | pm_runtime_disable(twl->dev); |
768 | 774 | ||
769 | /* autogate 60MHz ULPI clock, | 775 | /* autogate 60MHz ULPI clock, |