From patchwork Fri Feb 7 19:28:53 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandr Mezin X-Patchwork-Id: 3607401 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id C37CFBF418 for ; Fri, 7 Feb 2014 19:31:30 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0A76820120 for ; Fri, 7 Feb 2014 19:31:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 325B920115 for ; Fri, 7 Feb 2014 19:31:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751233AbaBGTb2 (ORCPT ); Fri, 7 Feb 2014 14:31:28 -0500 Received: from mail-la0-f45.google.com ([209.85.215.45]:34376 "EHLO mail-la0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751209AbaBGTb1 (ORCPT ); Fri, 7 Feb 2014 14:31:27 -0500 Received: by mail-la0-f45.google.com with SMTP id b8so3048045lan.32 for ; Fri, 07 Feb 2014 11:31:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=STUVTCxqP7BkrRWwQQAU+L0z757WDXvK7/0MK8l7Jpw=; b=n5QV5pBm/LHshHD1vVOKhrQOY0Z/2zPKvAbiQTU3MQCEpuyUQQO72OG0Mw7fMVymdY Rw8BXhsS0zCUTFm07ZuP0Ak+/kgovut/PiR2mLiOJCD/1jkzvP+wUwhVHne0SNY5veb/ wQWyxRt6EN9hC9WqjlEmIPN/oGN+Z/Li1Zv/+4WHqdDBEx9TXC2AIAeqSH/XbTXTnW0t v3RCI4byVhwC5HN2m4GFYT7npMqNS2hwGUwFGzyy8PHGwmF83cMT7EFP2oommVyakmry tqZGKU62nYTJea36LOWNwfGWtdPz0Hw4SlFpehVG4mxGOC1jsg5Tj0orVIILTDELspDR 3lWw== X-Received: by 10.152.143.231 with SMTP id sh7mr11282689lab.26.1391801486520; Fri, 07 Feb 2014 11:31:26 -0800 (PST) Received: from localhost.localdomain ([109.194.127.69]) by mx.google.com with ESMTPSA id ri4sm5884335lbb.6.2014.02.07.11.31.23 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 07 Feb 2014 11:31:24 -0800 (PST) From: Alexander Mezin To: linux-acpi@vger.kernel.org Cc: Alexander Mezin Subject: [PATCH 2/2] ACPI / battery: check AC adapter's state when battery state changes Date: Sat, 8 Feb 2014 02:28:53 +0700 Message-Id: <1391801333-18519-2-git-send-email-mezin.alexander@gmail.com> X-Mailer: git-send-email 1.8.5.4 In-Reply-To: <1391801333-18519-1-git-send-email-mezin.alexander@gmail.com> References: <1391801333-18519-1-git-send-email-mezin.alexander@gmail.com> Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Spam-Status: No, score=-7.3 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When battery state changes (i. e. it starts to charge/discharge), it could indicate that AC adapter has been plugged or unplugged. When POWER_SUPPLY_PROP_ONLINE is read, AC driver should check actual adapter state, and emit notification if the state has changed (my previous patch). This patch finally solves the problem with AC notifications on my HP Pavilion dv6-6179er. Signed-off-by: Alexander Mezin --- drivers/acpi/battery.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 470e754..68b263c 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c @@ -671,9 +671,22 @@ static void acpi_battery_quirks(struct acpi_battery *battery) } } +static int acpi_battery_check_ac_state(struct device *dev, void *unused) +{ + struct power_supply *ps = dev_get_drvdata(dev); + union power_supply_propval temp; + + if (ps->type != POWER_SUPPLY_TYPE_MAINS) + return 0; + + ps->get_property(ps, POWER_SUPPLY_PROP_ONLINE, &temp); + return 0; +} + static int acpi_battery_update(struct acpi_battery *battery) { int result, old_present = acpi_battery_present(battery); + int old_state = battery->state; result = acpi_battery_get_status(battery); if (result) return result; @@ -696,6 +709,15 @@ static int acpi_battery_update(struct acpi_battery *battery) } result = acpi_battery_get_state(battery); acpi_battery_quirks(battery); + if (old_state != battery->state) + /* + * Some BIOSes don't send notifications when ac adapter + * is plugged or unplugged. + * If battery changes its state, this could indicate that + * AC adapter's state has changed too. + */ + class_for_each_device(power_supply_class, NULL, NULL, + &acpi_battery_check_ac_state); return result; }