Received: by 2002:a05:6a10:6d25:0:0:0:0 with SMTP id gq37csp1891613pxb; Mon, 13 Sep 2021 07:38:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzeaEOXwA9u4pFMlP06pJWM+ccQcdB1opbGZr8H3Vzd5lKZCjB2Gfi3GFdV5V7tQ48Gx5+i X-Received: by 2002:a17:907:9908:: with SMTP id ka8mr13497761ejc.164.1631543890180; Mon, 13 Sep 2021 07:38:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631543890; cv=none; d=google.com; s=arc-20160816; b=eZA4RRT28hfkJFfrTSr4Mi+Vcb+K4hC7Zc4VawzsViW+TTNgVQMqIB2QA15VF1g7v2 9uDOEoPdoy4H5hZ3YHmLbya9/pcSCs5/NQ/shMK6hbuFcquAprKCUyIoXZ7K0NJYvfq6 NpktqWOnLBPt+rzlaqiZyKHWJNLRIv1RDb2DN1oj9TmqyctQninJnMLxUJylep6CqPhH sd4xaqi8eA7+HhFOcAyMRUZ9pSjOVsGPc2Tnbm4j3v8jKWcTbwlmtrmqISXzJoVnH504 VzYNSpMQDaWQiUYW+MjJvjl5YyOIgW/Lc6tNloVGawsFRbppqQnt/r9IwSUiI3SZ3Ivw G6VA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=fbUqjqa11SvXnWU3DPp4h6jYQOT+UNQKQSkJy2e/fwQ=; b=VwJReEQgZZ+DhECMqCpTz5OZQeVusrNWPcR24rtS6dSM96chG+c3fR52eKA5iUFrEB ngFRFfVuitbd73ILYdCVe+lqtZO1O66xIoUrRaNubsQY6vcTQf6o55Zw4koFMheze4Jy z0RAErSHcT3039BwGfrfjqTnYZ9f5gRc16tLZIn6JQ0qjIvPcdwnNwySQZF0s+rgfMsU edcnF8muy+K6g3UxZlWrshrWh1yRp2sLWmHZdUn5oqtdDTFh8+Iknlg0KTAO8ZyHmMs2 JMyCEyfELFKGSvbxd2q2qi8ESJcZVSTqiTK+AePevWddvw/leFhjr4C++xxh1aSstsZv 2OdQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=m6TtTWLW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s6si7603884edh.408.2021.09.13.07.37.45; Mon, 13 Sep 2021 07:38:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=m6TtTWLW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343917AbhIMOgi (ORCPT + 99 others); Mon, 13 Sep 2021 10:36:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:51898 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241738AbhIMOap (ORCPT ); Mon, 13 Sep 2021 10:30:45 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id DD01A6137A; Mon, 13 Sep 2021 13:51:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631541090; bh=AUAOhTPFuebkOjhrDueU01s6CvNvMJpixVeNc8usw/c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=m6TtTWLWWneWQ7ro/hlc7+L9/bIwfGOd88KJuXZ5k1aNyYifuRfUL41dZZbii+Zvt yMb8agIh1MzdMMt7gz7vRDnBh0RQ8zscefu+lxcqGWka7sGyqmB4txLbC07rc/nGDW kHBLvp4a2QZ/u2JcUYG7VYVb3Gku+Rygy6ERbtcg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Takashi Iwai , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Hans de Goede , Pavel Machek , Sasha Levin Subject: [PATCH 5.14 158/334] leds: trigger: audio: Add an activate callback to ensure the initial brightness is set Date: Mon, 13 Sep 2021 15:13:32 +0200 Message-Id: <20210913131118.697633763@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210913131113.390368911@linuxfoundation.org> References: <20210913131113.390368911@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Hans de Goede [ Upstream commit 64f67b5240db79eceb0bd57dae8e591fd3103ba0 ] Some 2-in-1s with a detachable (USB) keyboard(dock) have mute-LEDs in the speaker- and/or mic-mute keys on the keyboard. Examples of this are the Lenovo Thinkpad10 tablet (with its USB kbd-dock) and the HP x2 10 series. The detachable nature of these keyboards means that the keyboard and thus the mute LEDs may show up after the user (or userspace restoring old mixer settings) has muted the speaker and/or mic. Current LED-class devices with a default_trigger of "audio-mute" or "audio-micmute" initialize the brightness member of led_classdev with ledtrig_audio_get() before registering the LED. This makes the software state after attaching the keyboard match the actual audio mute state, e.g. cat /sys/class/leds/foo/brightness will show the right value. But before this commit nothing was actually calling the led_classdev's brightness_set[_blocking] callback so the value returned by ledtrig_audio_get() was never actually being sent to the hw, leading to the mute LEDs staying in their default power-on state, after attaching the keyboard, even if ledtrig_audio_get() returned a different state. This could be fixed by having the individual LED drivers call brightness_set[_blocking] themselves after registering the LED, but this really is something which should be done by a led-trigger activate callback. Add an activate callback for this, fixing the issue of the mute LEDs being out of sync after (re)attaching the keyboard. Cc: Takashi Iwai Fixes: faa2541f5b1a ("leds: trigger: Introduce audio mute LED trigger") Reviewed-by: Marek BehĂșn Signed-off-by: Hans de Goede Signed-off-by: Pavel Machek Signed-off-by: Sasha Levin --- drivers/leds/trigger/ledtrig-audio.c | 37 ++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/drivers/leds/trigger/ledtrig-audio.c b/drivers/leds/trigger/ledtrig-audio.c index f76621e88482..c6b437e6369b 100644 --- a/drivers/leds/trigger/ledtrig-audio.c +++ b/drivers/leds/trigger/ledtrig-audio.c @@ -6,10 +6,33 @@ #include #include #include +#include "../leds.h" -static struct led_trigger *ledtrig_audio[NUM_AUDIO_LEDS]; static enum led_brightness audio_state[NUM_AUDIO_LEDS]; +static int ledtrig_audio_mute_activate(struct led_classdev *led_cdev) +{ + led_set_brightness_nosleep(led_cdev, audio_state[LED_AUDIO_MUTE]); + return 0; +} + +static int ledtrig_audio_micmute_activate(struct led_classdev *led_cdev) +{ + led_set_brightness_nosleep(led_cdev, audio_state[LED_AUDIO_MICMUTE]); + return 0; +} + +static struct led_trigger ledtrig_audio[NUM_AUDIO_LEDS] = { + [LED_AUDIO_MUTE] = { + .name = "audio-mute", + .activate = ledtrig_audio_mute_activate, + }, + [LED_AUDIO_MICMUTE] = { + .name = "audio-micmute", + .activate = ledtrig_audio_micmute_activate, + }, +}; + enum led_brightness ledtrig_audio_get(enum led_audio type) { return audio_state[type]; @@ -19,24 +42,22 @@ EXPORT_SYMBOL_GPL(ledtrig_audio_get); void ledtrig_audio_set(enum led_audio type, enum led_brightness state) { audio_state[type] = state; - led_trigger_event(ledtrig_audio[type], state); + led_trigger_event(&ledtrig_audio[type], state); } EXPORT_SYMBOL_GPL(ledtrig_audio_set); static int __init ledtrig_audio_init(void) { - led_trigger_register_simple("audio-mute", - &ledtrig_audio[LED_AUDIO_MUTE]); - led_trigger_register_simple("audio-micmute", - &ledtrig_audio[LED_AUDIO_MICMUTE]); + led_trigger_register(&ledtrig_audio[LED_AUDIO_MUTE]); + led_trigger_register(&ledtrig_audio[LED_AUDIO_MICMUTE]); return 0; } module_init(ledtrig_audio_init); static void __exit ledtrig_audio_exit(void) { - led_trigger_unregister_simple(ledtrig_audio[LED_AUDIO_MUTE]); - led_trigger_unregister_simple(ledtrig_audio[LED_AUDIO_MICMUTE]); + led_trigger_unregister(&ledtrig_audio[LED_AUDIO_MUTE]); + led_trigger_unregister(&ledtrig_audio[LED_AUDIO_MICMUTE]); } module_exit(ledtrig_audio_exit); -- 2.30.2