From patchwork Mon Apr 24 13:33:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBLxJlwaWXFhA==?= X-Patchwork-Id: 9696395 X-Patchwork-Delegate: dvhart@infradead.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 5F0BB601AE for ; Mon, 24 Apr 2017 13:35:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 50FAB26247 for ; Mon, 24 Apr 2017 13:35:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 45A912818B; Mon, 24 Apr 2017 13:35:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_HI,RCVD_IN_SORBS_SPAM autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B66B327FAD for ; Mon, 24 Apr 2017 13:35:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1171282AbdDXNdx (ORCPT ); Mon, 24 Apr 2017 09:33:53 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:34821 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1171294AbdDXNdn (ORCPT ); Mon, 24 Apr 2017 09:33:43 -0400 Received: by mail-lf0-f66.google.com with SMTP id i3so16575733lfh.2 for ; Mon, 24 Apr 2017 06:33:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kempniu.pl; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aTmvmRMa9y/UKWQGAnOvOsQPLUlRnIuxWdlOnsjecnE=; b=anc2PVWttMpDhVgqw/gfqaojwaQZeCSwwkiOjYDh1VX+f8eV70XqklmZmzDaqnrN+q OFZSaDYdsg83XggoydCOiDUeV8YECHEC6cP4QC5TlDBIFg6QLb6W94/bNRCOU2IyzJDO 1rlOvlnqvhyf/f1jpOHitOuvYGSG0G8Q/HKAU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aTmvmRMa9y/UKWQGAnOvOsQPLUlRnIuxWdlOnsjecnE=; b=muieoCVE6AKgadqLepT/aG13Ea+AODbyvvavlNrjmYoW1IuswAjO6/HLbGQX/UHz6Y VYjJa9cGn8c7ePV3PwrQrUDg4pDxw0kWkHQgvgiIoklOpMN+nO1UNPnxFi/EFJmwte87 v2WtgbSRKEPIu4Y7VyhZfVYdSA06Jh87mLRKrUIm1tEIxnFFlxJT2B5UIBfZ8ms3inaK LENyr8r8zIvwBKhTt9iBZpYZ3OEg6IkYvjG4HVTTgHUlNXh0S4XShKIgDjaktkM1ZKpo r9dw5+eFLlBEgy6zHFecO7q1r1aQpH8PT0cdz9plUurecpOS9vOILkPFRocer89p8hZW 7EYQ== X-Gm-Message-State: AN3rC/7J7afqaGKmbb2wvSknNVmCvD4jBUycgJt58l+ixXLmOmlCIFri 1FgVVPZdzEBz7X/1 X-Received: by 10.46.15.17 with SMTP id 17mr8438679ljp.3.1493040821477; Mon, 24 Apr 2017 06:33:41 -0700 (PDT) Received: from ozzy.hq.kempniu.pl ([2001:a10:160:3::3]) by smtp.googlemail.com with ESMTPSA id 69sm3346138lfq.36.2017.04.24.06.33.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 24 Apr 2017 06:33:40 -0700 (PDT) From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= To: Jonathan Woithe , Darren Hart , Andy Shevchenko Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 04/10] platform/x86: fujitsu-laptop: rework backlight power synchronization Date: Mon, 24 Apr 2017 15:33:28 +0200 Message-Id: <20170424133334.7064-5-kernel@kempniu.pl> X-Mailer: git-send-email 2.12.2 In-Reply-To: <20170424133334.7064-1-kernel@kempniu.pl> References: <20170424133334.7064-1-kernel@kempniu.pl> MIME-Version: 1.0 Sender: platform-driver-x86-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP fujitsu-laptop registers two ACPI drivers: one for ACPI device FUJ02B1 enabling backlight control and another for ACPI device FUJ02E3 which handles various other stuff (hotkeys, LEDs, etc.) So far, these two drivers have been entangled by calls to fext_backlight() (previously known as call_fext_func()) in the backlight part of the module which use module-wide data managed by the other part of the module and accesses to the backlight device from within acpi_fujitsu_laptop_add(). This entaglement can be solved by storing an independently fetched ACPI handle to the FUJ02E3 device inside the data structure managed by the backlight part of the module. Add a field to struct fujitsu_bl for storing a handle to the FUJ02E3 ACPI device. Make fext_backlight() calls use that handle instead of the one from struct fujitsu_laptop. Move backlight power synchronization from acpi_fujitsu_laptop_add() to fujitsu_backlight_register(). This makes the bl_device field of struct fujitsu_bl redundant, so remove it. Signed-off-by: Michał Kępień --- drivers/platform/x86/fujitsu-laptop.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c index ea3210ee83ec..5f6b34a97348 100644 --- a/drivers/platform/x86/fujitsu-laptop.c +++ b/drivers/platform/x86/fujitsu-laptop.c @@ -131,9 +131,9 @@ /* Device controlling the backlight and associated keys */ struct fujitsu_bl { acpi_handle handle; + acpi_handle fext_handle; struct input_dev *input; char phys[32]; - struct backlight_device *bl_device; unsigned int max_brightness; unsigned int brightness_level; }; @@ -290,10 +290,12 @@ static int bl_get_brightness(struct backlight_device *b) static int bl_update_status(struct backlight_device *b) { - if (b->props.power == FB_BLANK_POWERDOWN) - fext_backlight(fujitsu_laptop->handle, 0x1, 0x4, 0x3); - else - fext_backlight(fujitsu_laptop->handle, 0x1, 0x4, 0x0); + if (fujitsu_bl->fext_handle) { + if (b->props.power == FB_BLANK_POWERDOWN) + fext_backlight(fujitsu_bl->fext_handle, 0x1, 0x4, 0x3); + else + fext_backlight(fujitsu_bl->fext_handle, 0x1, 0x4, 0x0); + } return set_lcd_level(b->props.brightness); } @@ -397,6 +399,7 @@ static int fujitsu_backlight_register(struct acpi_device *device) .type = BACKLIGHT_PLATFORM }; struct backlight_device *bd; + acpi_status status; bd = devm_backlight_device_register(&device->dev, "fujitsu-laptop", &device->dev, NULL, @@ -404,7 +407,10 @@ static int fujitsu_backlight_register(struct acpi_device *device) if (IS_ERR(bd)) return PTR_ERR(bd); - fujitsu_bl->bl_device = bd; + status = acpi_get_handle(NULL, "\\_SB.FEXT", &fujitsu_bl->fext_handle); + if (ACPI_SUCCESS(status) && + fext_backlight(fujitsu_bl->fext_handle, 0x2, 0x4, 0x0) == 3) + bd->props.power = FB_BLANK_POWERDOWN; return 0; } @@ -861,15 +867,6 @@ static int acpi_fujitsu_laptop_add(struct acpi_device *device) pr_info("BTNI: [0x%x]\n", fext_buttons(fujitsu_laptop->handle, 0x0, 0x0, 0x0)); - /* Sync backlight power status */ - if (fujitsu_bl->bl_device && - acpi_video_get_backlight_type() == acpi_backlight_vendor) { - if (fext_backlight(fujitsu_laptop->handle, 0x2, 0x4, 0x0) == 3) - fujitsu_bl->bl_device->props.power = FB_BLANK_POWERDOWN; - else - fujitsu_bl->bl_device->props.power = FB_BLANK_UNBLANK; - } - error = acpi_fujitsu_laptop_leds_register(device); if (error) goto err_free_fifo;