rt5682-sdw.c (3f3d66ba998fb079c1239430e96e3b138bc63166) | rt5682-sdw.c (6ab18105029ca3d739dd4c5c18638c7c6d568bbb) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2// 3// rt5682-sdw.c -- RT5682 ALSA SoC audio component driver 4// 5// Copyright 2019 Realtek Semiconductor Corp. 6// Author: Oder Chiou <oder_chiou@realtek.com> 7// 8 --- 308 unchanged lines hidden (view full) --- 317 &rt5682_sdw_indirect_regmap); 318 if (IS_ERR(rt5682->regmap)) { 319 ret = PTR_ERR(rt5682->regmap); 320 dev_err(dev, "Failed to allocate register map: %d\n", 321 ret); 322 return ret; 323 } 324 | 1// SPDX-License-Identifier: GPL-2.0-only 2// 3// rt5682-sdw.c -- RT5682 ALSA SoC audio component driver 4// 5// Copyright 2019 Realtek Semiconductor Corp. 6// Author: Oder Chiou <oder_chiou@realtek.com> 7// 8 --- 308 unchanged lines hidden (view full) --- 317 &rt5682_sdw_indirect_regmap); 318 if (IS_ERR(rt5682->regmap)) { 319 ret = PTR_ERR(rt5682->regmap); 320 dev_err(dev, "Failed to allocate register map: %d\n", 321 ret); 322 return ret; 323 } 324 |
325 regcache_cache_only(rt5682->sdw_regmap, true); 326 regcache_cache_only(rt5682->regmap, true); 327 |
|
325 /* 326 * Mark hw_init to false 327 * HW init will be performed when device reports present 328 */ 329 rt5682->hw_init = false; 330 rt5682->first_hw_init = false; 331 332 mutex_init(&rt5682->calibrate_mutex); --- 14 unchanged lines hidden (view full) --- 347 int ret = 0, loop = 10; 348 unsigned int val; 349 350 rt5682->disable_irq = false; 351 352 if (rt5682->hw_init) 353 return 0; 354 | 328 /* 329 * Mark hw_init to false 330 * HW init will be performed when device reports present 331 */ 332 rt5682->hw_init = false; 333 rt5682->first_hw_init = false; 334 335 mutex_init(&rt5682->calibrate_mutex); --- 14 unchanged lines hidden (view full) --- 350 int ret = 0, loop = 10; 351 unsigned int val; 352 353 rt5682->disable_irq = false; 354 355 if (rt5682->hw_init) 356 return 0; 357 |
358 regcache_cache_only(rt5682->sdw_regmap, false); 359 regcache_cache_only(rt5682->regmap, false); 360 if (rt5682->first_hw_init) 361 regcache_cache_bypass(rt5682->regmap, true); 362 |
|
355 /* 356 * PM runtime is only enabled when a Slave reports as Attached 357 */ 358 if (!rt5682->first_hw_init) { 359 /* set autosuspend parameters */ 360 pm_runtime_set_autosuspend_delay(&slave->dev, 3000); 361 pm_runtime_use_autosuspend(&slave->dev); 362 363 /* update count of parent 'active' children */ 364 pm_runtime_set_active(&slave->dev); 365 366 /* make sure the device does not suspend immediately */ 367 pm_runtime_mark_last_busy(&slave->dev); 368 369 pm_runtime_enable(&slave->dev); 370 } 371 372 pm_runtime_get_noresume(&slave->dev); 373 | 363 /* 364 * PM runtime is only enabled when a Slave reports as Attached 365 */ 366 if (!rt5682->first_hw_init) { 367 /* set autosuspend parameters */ 368 pm_runtime_set_autosuspend_delay(&slave->dev, 3000); 369 pm_runtime_use_autosuspend(&slave->dev); 370 371 /* update count of parent 'active' children */ 372 pm_runtime_set_active(&slave->dev); 373 374 /* make sure the device does not suspend immediately */ 375 pm_runtime_mark_last_busy(&slave->dev); 376 377 pm_runtime_enable(&slave->dev); 378 } 379 380 pm_runtime_get_noresume(&slave->dev); 381 |
374 if (rt5682->first_hw_init) { 375 regcache_cache_only(rt5682->regmap, false); 376 regcache_cache_bypass(rt5682->regmap, true); 377 } 378 | |
379 while (loop > 0) { 380 regmap_read(rt5682->regmap, RT5682_DEVICE_ID, &val); 381 if (val == DEVICE_ID) 382 break; 383 dev_warn(dev, "Device with ID register %x is not rt5682\n", val); 384 usleep_range(30000, 30005); 385 loop--; 386 } --- 313 unchanged lines hidden (view full) --- 700{ 701 struct rt5682_priv *rt5682 = dev_get_drvdata(dev); 702 703 if (!rt5682->hw_init) 704 return 0; 705 706 cancel_delayed_work_sync(&rt5682->jack_detect_work); 707 | 382 while (loop > 0) { 383 regmap_read(rt5682->regmap, RT5682_DEVICE_ID, &val); 384 if (val == DEVICE_ID) 385 break; 386 dev_warn(dev, "Device with ID register %x is not rt5682\n", val); 387 usleep_range(30000, 30005); 388 loop--; 389 } --- 313 unchanged lines hidden (view full) --- 703{ 704 struct rt5682_priv *rt5682 = dev_get_drvdata(dev); 705 706 if (!rt5682->hw_init) 707 return 0; 708 709 cancel_delayed_work_sync(&rt5682->jack_detect_work); 710 |
711 regcache_cache_only(rt5682->sdw_regmap, true); |
|
708 regcache_cache_only(rt5682->regmap, true); 709 regcache_mark_dirty(rt5682->regmap); 710 711 return 0; 712} 713 714static int __maybe_unused rt5682_dev_system_suspend(struct device *dev) 715{ --- 48 unchanged lines hidden (view full) --- 764 dev_err(&slave->dev, "Initialization not complete, timed out\n"); 765 sdw_show_ping_status(slave->bus, true); 766 767 return -ETIMEDOUT; 768 } 769 770regmap_sync: 771 slave->unattach_request = 0; | 712 regcache_cache_only(rt5682->regmap, true); 713 regcache_mark_dirty(rt5682->regmap); 714 715 return 0; 716} 717 718static int __maybe_unused rt5682_dev_system_suspend(struct device *dev) 719{ --- 48 unchanged lines hidden (view full) --- 768 dev_err(&slave->dev, "Initialization not complete, timed out\n"); 769 sdw_show_ping_status(slave->bus, true); 770 771 return -ETIMEDOUT; 772 } 773 774regmap_sync: 775 slave->unattach_request = 0; |
776 regcache_cache_only(rt5682->sdw_regmap, false); |
|
772 regcache_cache_only(rt5682->regmap, false); 773 regcache_sync(rt5682->regmap); 774 775 return 0; 776} 777 778static const struct dev_pm_ops rt5682_pm = { 779 SET_SYSTEM_SLEEP_PM_OPS(rt5682_dev_system_suspend, rt5682_dev_resume) --- 19 unchanged lines hidden --- | 777 regcache_cache_only(rt5682->regmap, false); 778 regcache_sync(rt5682->regmap); 779 780 return 0; 781} 782 783static const struct dev_pm_ops rt5682_pm = { 784 SET_SYSTEM_SLEEP_PM_OPS(rt5682_dev_system_suspend, rt5682_dev_resume) --- 19 unchanged lines hidden --- |