Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp1380865ybp; Thu, 17 Oct 2019 11:57:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqwUHkn/CnXtDNtDvQGaFmmSSJokgkRIHZzERNNdUfSoCZOVf0M6ezV1PohLh/NF+/dD20aP X-Received: by 2002:a50:eb42:: with SMTP id z2mr5398666edp.291.1571338634887; Thu, 17 Oct 2019 11:57:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571338634; cv=none; d=google.com; s=arc-20160816; b=IUg40BFUFRFKLs+DcyvZ7s1x6pj7PcnrwuR8tOZa0b7ZHuXcpKOuq3NC86b2dD8344 /rNcepTeu6zS8M1lL97bHJfhrSQNAMHWbCLg49aefRQpfsR0AO7iCmIxdjFqkQLkBeHx DhfqpTVczBosjtZtdk/D/Fbm4Hl15rFafD+gPN141W5qCZj+lmDXBwEcikBaodTiQSeB c35U+ceYOcARwKqBteGqN4EJLgojlg0aBrDST4U0iRRngAPBN8Qe94Hj9O0oFyTvE7E9 UbQ8lSALvJZYk/zulPm7DsVRLMNAJHjh+/ug1sNVfi4LposkxRRlx6UBkVx2GLDKHnZO loHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3gEKl9Fsf4oZAjJll+Zzd8abYypyxl0SIQzMiE9qFts=; b=lf7PfUhjYSAazP9qzek0TgGhX0/XEgLM+InEcOiVH6ZITVERfD809RX8/woclNqxZ0 zxBNlLxs3Tq9GJ1769CLE2TyD2Wxlub8OJ2GY7hryYLFwMZ46rJ213Pq4dSUa5khpMKr F+8uIHfk1rg2+kdHRGjQWmHBY6rQjxTXFj+VkZBjVB3UlXZ/wOB2Yf5ZcUHneTKB6KI/ LCsyKHbipNGj7HZk6StzBfnl1TgjehLWlgpsP5NmWOmvtw4IiZ1NvjXwHUiclwR1Ro18 lllGsO5sK5GYbuFWn4ACp2yuDzYBMd/J9u0do4TKoFcNH8a4cxLbFYy6SpegG9iHd/lO 1XdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="Ukeob/UB"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s42si2154791edm.292.2019.10.17.11.56.52; Thu, 17 Oct 2019 11:57:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="Ukeob/UB"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733106AbfJPWLj (ORCPT + 99 others); Wed, 16 Oct 2019 18:11:39 -0400 Received: from mail.kernel.org ([198.145.29.99]:48622 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2395406AbfJPV4l (ORCPT ); Wed, 16 Oct 2019 17:56:41 -0400 Received: from localhost (unknown [192.55.54.58]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6EE0E21D7C; Wed, 16 Oct 2019 21:56:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1571263000; bh=jYQaEFMVCYMetkTCT+mdJkGMP6kuSVqEilUIlS73yjA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ukeob/UB+nxPtTTpR7Lec0ukds0YMB72xv+NIIhAthxyg5URLPJeIbdM4E2mj7IDs iZSMhN5WJDQL8eYFpKooY85uEaWli2igmaAHP+q8VeVYxjGZIHIxyQHDg3T+m1U+mT +YNCH9adlQRqBf64X5Yba7pap/SZJVAq3lLSnaAA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hans de Goede , Jonathan Cameron Subject: [PATCH 4.14 41/65] iio: adc: axp288: Override TS pin bias current for some models Date: Wed, 16 Oct 2019 14:50:55 -0700 Message-Id: <20191016214832.165243442@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191016214756.457746573@linuxfoundation.org> References: <20191016214756.457746573@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Hans de Goede commit 972917419a0ba25afbf69d5d8c9fa644d676f887 upstream. Since commit 9bcf15f75cac ("iio: adc: axp288: Fix TS-pin handling") we preserve the bias current set by the firmware at boot. This fixes issues we were seeing on various models, but it seems our old hardcoded 80ųA bias current was working around a firmware bug on at least one model laptop. In order to both have our cake and eat it, this commit adds a dmi based list of models where we need to override the firmware set bias current and adds the one model we now know needs this to it: The Lenovo Ideapad 100S (11 inch version). Fixes: 9bcf15f75cac ("iio: adc: axp288: Fix TS-pin handling") BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=203829 Signed-off-by: Hans de Goede Cc: Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman --- drivers/iio/adc/axp288_adc.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) --- a/drivers/iio/adc/axp288_adc.c +++ b/drivers/iio/adc/axp288_adc.c @@ -16,6 +16,7 @@ * */ +#include #include #include #include @@ -34,6 +35,11 @@ #define AXP288_ADC_EN_MASK 0xF0 #define AXP288_ADC_TS_ENABLE 0x01 +#define AXP288_ADC_TS_BIAS_MASK GENMASK(5, 4) +#define AXP288_ADC_TS_BIAS_20UA (0 << 4) +#define AXP288_ADC_TS_BIAS_40UA (1 << 4) +#define AXP288_ADC_TS_BIAS_60UA (2 << 4) +#define AXP288_ADC_TS_BIAS_80UA (3 << 4) #define AXP288_ADC_TS_CURRENT_ON_OFF_MASK GENMASK(1, 0) #define AXP288_ADC_TS_CURRENT_OFF (0 << 0) #define AXP288_ADC_TS_CURRENT_ON_WHEN_CHARGING (1 << 0) @@ -194,10 +200,36 @@ static int axp288_adc_read_raw(struct ii return ret; } +/* + * We rely on the machine's firmware to correctly setup the TS pin bias current + * at boot. This lists systems with broken fw where we need to set it ourselves. + */ +static const struct dmi_system_id axp288_adc_ts_bias_override[] = { + { + /* Lenovo Ideapad 100S (11 inch) */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 100S-11IBY"), + }, + .driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA, + }, + {} +}; + static int axp288_adc_initialize(struct axp288_adc_info *info) { + const struct dmi_system_id *bias_override; int ret, adc_enable_val; + bias_override = dmi_first_match(axp288_adc_ts_bias_override); + if (bias_override) { + ret = regmap_update_bits(info->regmap, AXP288_ADC_TS_PIN_CTRL, + AXP288_ADC_TS_BIAS_MASK, + (uintptr_t)bias_override->driver_data); + if (ret) + return ret; + } + /* * Determine if the TS pin is enabled and set the TS current-source * accordingly.