aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-02-21 16:40:41 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-21 16:40:41 -0500
commitcd50b70ccd5c87794ec28bfb87b7fba9961eb0ae (patch)
tree3714f7d57ebe3e07f56cd4b4f389a404b716ca37 /drivers/acpi
parent2bfedd1d9f470506d98cb5662ced381c38225968 (diff)
parent3466b547e37b988723dc93465b7cb06b4b1f731f (diff)
Merge tag 'pm+acpi-3.20-rc1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull one more batch of power management and ACPI updates from Rafael Wysocki: "These are mostly fixes on top of the previously merged recent PM and ACPI material. First, one commit that broke the ACPI LPSS (Low-Power Subsystem) driver on a Dell box is reverted and there are two stable-candidate fixes for that driver. Another fix cleans up two recently added ACPI EC messages that look odd and the printk level of a noisy debug message in the core ACPI resources handling code is reduced. In addition to that we have two stable-candidate fixes for the s3c cpufreq driver, two cpuidle powernv driver updates related to Device Trees and a PNP subsystem cleanup that will allow us to get rid of some old ugliness going forward. Also there is a new blacklist entry for the ACPI backlight code. Specifics: - Revert a recent ACPI LPSS driver commit that prevented the touchpad driver from loading on Dell XPS13 (Jarkko Nikula). - Make the ACPI LPSS driver disable the I2C controllers and deassert SPI host controllers resets at startup on Intel BayTrail and Braswell SoCs in case they have been left in wrong states by the platform firmware which then may casuse fatal controller driver failures during resume from hibernation (Mika Westerberg). - Make two recently added ACPI EC messages look better (Scot Doyle). - Reduce the printk level of a recently added debug message related to ACPI resources that may become noisy in some cases (Rafael J Wysocki). - Add a new ACPI backlight blacklist entry for Samsung Series 9 (900X3C/900X3D/900X3E/900X4C/900X4D) laptops where the native backlight interface doesn't work while the ACPI based one does (Jens Reyer). - Make the PNP sybsystem's core code use __request_region() followed by __release_region() instead of __check_region() which then will allow us to get rid of the latter as it has no more users (Jakub Sitnicki). - Fix a build breakage and an issue with two __init functions that may be called after initialization in the s3c cpufreq driver (Arnd Bergmann). - Make the powernv cpuidle driver read target_residency values for idle states from a Device Tree (as we have the suitable DT bindings for that now) and improve the parsing of the powermgmt DT node in that driver (Preeti U Murthy)" * tag 'pm+acpi-3.20-rc1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: cpuidle: powernv: Avoid endianness conversions while parsing DT cpufreq: s3c: remove last use of resume_clocks callback cpufreq: s3c: remove incorrect __init annotations ACPI / LPSS: Deassert resets for SPI host controllers on Braswell ACPI / LPSS: Always disable I2C host controllers ACPI / resources: Change pr_info() to pr_debug() for debug information ACPI / video: Disable native backlight on Samsung Series 9 laptops cpuidle: powernv: Read target_residency value of idle states from DT if available Revert "ACPI / LPSS: Remove non-existing clock control from Intel Lynxpoint I2C" ACPI / EC: Remove non-standard log emphasis PNP: Switch from __check_region() to __request_region()
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/acpi_lpss.c21
-rw-r--r--drivers/acpi/ec.c4
-rw-r--r--drivers/acpi/resource.c2
-rw-r--r--drivers/acpi/video.c9
4 files changed, 30 insertions, 6 deletions
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 02e835f3cf8a..657964e8ab7e 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -105,7 +105,7 @@ static void lpss_uart_setup(struct lpss_private_data *pdata)
105 } 105 }
106} 106}
107 107
108static void byt_i2c_setup(struct lpss_private_data *pdata) 108static void lpss_deassert_reset(struct lpss_private_data *pdata)
109{ 109{
110 unsigned int offset; 110 unsigned int offset;
111 u32 val; 111 u32 val;
@@ -114,9 +114,18 @@ static void byt_i2c_setup(struct lpss_private_data *pdata)
114 val = readl(pdata->mmio_base + offset); 114 val = readl(pdata->mmio_base + offset);
115 val |= LPSS_RESETS_RESET_APB | LPSS_RESETS_RESET_FUNC; 115 val |= LPSS_RESETS_RESET_APB | LPSS_RESETS_RESET_FUNC;
116 writel(val, pdata->mmio_base + offset); 116 writel(val, pdata->mmio_base + offset);
117}
118
119#define LPSS_I2C_ENABLE 0x6c
120
121static void byt_i2c_setup(struct lpss_private_data *pdata)
122{
123 lpss_deassert_reset(pdata);
117 124
118 if (readl(pdata->mmio_base + pdata->dev_desc->prv_offset)) 125 if (readl(pdata->mmio_base + pdata->dev_desc->prv_offset))
119 pdata->fixed_clk_rate = 133000000; 126 pdata->fixed_clk_rate = 133000000;
127
128 writel(0, pdata->mmio_base + LPSS_I2C_ENABLE);
120} 129}
121 130
122static struct lpss_device_desc lpt_dev_desc = { 131static struct lpss_device_desc lpt_dev_desc = {
@@ -125,7 +134,7 @@ static struct lpss_device_desc lpt_dev_desc = {
125}; 134};
126 135
127static struct lpss_device_desc lpt_i2c_dev_desc = { 136static struct lpss_device_desc lpt_i2c_dev_desc = {
128 .flags = LPSS_CLK | LPSS_LTR, 137 .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_LTR,
129 .prv_offset = 0x800, 138 .prv_offset = 0x800,
130}; 139};
131 140
@@ -166,6 +175,12 @@ static struct lpss_device_desc byt_i2c_dev_desc = {
166 .setup = byt_i2c_setup, 175 .setup = byt_i2c_setup,
167}; 176};
168 177
178static struct lpss_device_desc bsw_spi_dev_desc = {
179 .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX,
180 .prv_offset = 0x400,
181 .setup = lpss_deassert_reset,
182};
183
169#else 184#else
170 185
171#define LPSS_ADDR(desc) (0UL) 186#define LPSS_ADDR(desc) (0UL)
@@ -198,7 +213,7 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = {
198 /* Braswell LPSS devices */ 213 /* Braswell LPSS devices */
199 { "80862288", LPSS_ADDR(byt_pwm_dev_desc) }, 214 { "80862288", LPSS_ADDR(byt_pwm_dev_desc) },
200 { "8086228A", LPSS_ADDR(byt_uart_dev_desc) }, 215 { "8086228A", LPSS_ADDR(byt_uart_dev_desc) },
201 { "8086228E", LPSS_ADDR(byt_spi_dev_desc) }, 216 { "8086228E", LPSS_ADDR(bsw_spi_dev_desc) },
202 { "808622C1", LPSS_ADDR(byt_i2c_dev_desc) }, 217 { "808622C1", LPSS_ADDR(byt_i2c_dev_desc) },
203 218
204 { "INT3430", LPSS_ADDR(lpt_dev_desc) }, 219 { "INT3430", LPSS_ADDR(lpt_dev_desc) },
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 982b67faaaf3..a8dd2f763382 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -680,7 +680,7 @@ static void acpi_ec_start(struct acpi_ec *ec, bool resuming)
680 /* Enable GPE for event processing (SCI_EVT=1) */ 680 /* Enable GPE for event processing (SCI_EVT=1) */
681 if (!resuming) 681 if (!resuming)
682 acpi_ec_submit_request(ec); 682 acpi_ec_submit_request(ec);
683 pr_info("+++++ EC started +++++\n"); 683 pr_debug("EC started\n");
684 } 684 }
685 spin_unlock_irqrestore(&ec->lock, flags); 685 spin_unlock_irqrestore(&ec->lock, flags);
686} 686}
@@ -712,7 +712,7 @@ static void acpi_ec_stop(struct acpi_ec *ec, bool suspending)
712 acpi_ec_complete_request(ec); 712 acpi_ec_complete_request(ec);
713 clear_bit(EC_FLAGS_STARTED, &ec->flags); 713 clear_bit(EC_FLAGS_STARTED, &ec->flags);
714 clear_bit(EC_FLAGS_STOPPED, &ec->flags); 714 clear_bit(EC_FLAGS_STOPPED, &ec->flags);
715 pr_info("+++++ EC stopped +++++\n"); 715 pr_debug("EC stopped\n");
716 } 716 }
717 spin_unlock_irqrestore(&ec->lock, flags); 717 spin_unlock_irqrestore(&ec->lock, flags);
718} 718}
diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c
index 4752b9939987..c723668e3e27 100644
--- a/drivers/acpi/resource.c
+++ b/drivers/acpi/resource.c
@@ -46,7 +46,7 @@ static bool acpi_dev_resource_len_valid(u64 start, u64 end, u64 len, bool io)
46 if (len && reslen && reslen == len && start <= end) 46 if (len && reslen && reslen == len && start <= end)
47 return true; 47 return true;
48 48
49 pr_info("ACPI: invalid or unassigned resource %s [%016llx - %016llx] length [%016llx]\n", 49 pr_debug("ACPI: invalid or unassigned resource %s [%016llx - %016llx] length [%016llx]\n",
50 io ? "io" : "mem", start, end, len); 50 io ? "io" : "mem", start, end, len);
51 51
52 return false; 52 return false;
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 88a4f99dd2a7..debd30917010 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -540,6 +540,15 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
540 DMI_MATCH(DMI_PRODUCT_NAME, "730U3E/740U3E"), 540 DMI_MATCH(DMI_PRODUCT_NAME, "730U3E/740U3E"),
541 }, 541 },
542 }, 542 },
543 {
544 /* https://bugs.freedesktop.org/show_bug.cgi?id=87286 */
545 .callback = video_disable_native_backlight,
546 .ident = "SAMSUNG 900X3C/900X3D/900X3E/900X4C/900X4D",
547 .matches = {
548 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
549 DMI_MATCH(DMI_PRODUCT_NAME, "900X3C/900X3D/900X3E/900X4C/900X4D"),
550 },
551 },
543 552
544 { 553 {
545 /* https://bugzilla.redhat.com/show_bug.cgi?id=1163574 */ 554 /* https://bugzilla.redhat.com/show_bug.cgi?id=1163574 */