From patchwork Mon Jun 1 17:47:30 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Torokhov X-Patchwork-Id: 6523891 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 24CA99F1CC for ; Mon, 1 Jun 2015 17:50:13 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C028E204EC for ; Mon, 1 Jun 2015 17:50:07 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AD2B1204EB for ; Mon, 1 Jun 2015 17:50:06 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1YzTog-0005IU-7j; Mon, 01 Jun 2015 17:48:02 +0000 Received: from mail-ig0-x233.google.com ([2607:f8b0:4001:c05::233]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1YzToc-00059f-9F for linux-arm-kernel@lists.infradead.org; Mon, 01 Jun 2015 17:47:59 +0000 Received: by igbhj9 with SMTP id hj9so67419868igb.1 for ; Mon, 01 Jun 2015 10:47:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=jHgd9Rh5rMN/8FERiFpB2LyEkgI2WWBjD0Xsj3Gig44=; b=eXruUzipfhd6NidU9CskOmbqdQLXIRdxemz/paPygYc3nkSg4crhGLqBNhGVDtku97 MfTw4bC38ZQJkDqMfmzNNdkuxqmPreHjqLL410aPzKbnvq/83M421Fw3GAZ94KVNMivE Q4a+w4CqgFXKSu3BqX3OqOK76YxXRJ7avyPQMdBirZBFVYV3+p2a92oCJAdjwiXcfmrP f3FUeFdgWyvS6KYCePIBz4JkTYPvzzIcvqmTE4qq1mV/r/bRNSON/Ca4800DJSbyHrnl 6BN6v5xI0Ey0Ic8tDnvmaBCLsRLy8NH+K1iYuCpj4s6KbXiIEgYE5SOVn5JB6vKkwLiX RAVg== X-Received: by 10.43.9.198 with SMTP id ox6mr11412709icb.57.1433180855311; Mon, 01 Jun 2015 10:47:35 -0700 (PDT) Received: from dtor-ws ([2620:0:1000:1301:c147:b769:2912:1020]) by mx.google.com with ESMTPSA id 7sm10843536iok.43.2015.06.01.10.47.32 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 01 Jun 2015 10:47:34 -0700 (PDT) Date: Mon, 1 Jun 2015 10:47:30 -0700 From: Dmitry Torokhov To: Pavel Machek Subject: Re: Please revert 3eea8b5d68c801fec788b411582b803463834752 as it breaks touchscreen on n900. Message-ID: <20150601174730.GA30024@dtor-ws> References: <20150529194955.GV2026@saruman.tx.rr.com> <20150529195629.GA9811@amd> <20150529201745.GC17267@lukather> <20150529202123.GY2026@saruman.tx.rr.com> <20150529202954.GA26494@localhost> <20150529203456.GC22083@amd> <20150601095556.GH17267@lukather> <20150601140605.GA26908@amd> <20150601145825.GA20557@lukather> <20150601152111.GA14015@amd> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20150601152111.GA14015@amd> User-Agent: Mutt/1.5.21 (2010-09-15) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150601_104758_372266_9827271F X-CRM114-Status: GOOD ( 25.73 ) X-Spam-Score: -0.8 (/) Cc: ivo.g.dimitrov.75@gmail.com, khilman@kernel.org, tony@atomide.com, sre@debian.org, aaro.koskinen@iki.fi, Sebastian Reichel , Felipe Balbi , kernel list , sre@ring0.de, pali.rohar@gmail.com, Maxime Ripard , linux-omap@vger.kernel.org, Linus Torvalds , patrikbachan@gmail.com, linux-arm-kernel X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable 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 On Mon, Jun 01, 2015 at 05:21:11PM +0200, Pavel Machek wrote: > > > > > > > The 3eea8b5d68c801fec788b411582b803463834752 is just bad. > > > > > > > > You were very welcome to review this patch at the time and/or suggest > > > > a fix that pleases everyone. > > > > > > You should be the one that should suggest fixes, as you broke it in > > > the first place. But clearly you don't understand that. > > > > You actually never asked for a fix, and went head first calling this > > patch "bad" and asking for nothing but reverting it. > > Date: Fri, 29 May 2015 21:08:16 +0200 > Subject: 4.1 touchscreen regression on n900 -- pinpointed [was Re: > linux-n900 > ... > Maxime, can you suggest a fix? How about we do something like below (it needs a small edt-ft5x06 fixup that I'll send separately). Not tested. Thanks. diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c index 29d179a..394b1de 100644 --- a/drivers/input/touchscreen/edt-ft5x06.c +++ b/drivers/input/touchscreen/edt-ft5x06.c @@ -1041,7 +1041,7 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client, 0, tsdata->num_y * 64 - 1, 0, 0); if (!pdata) - touchscreen_parse_of_params(input); + touchscreen_parse_of_params(input, true); error = input_mt_init_slots(input, MAX_SUPPORT_POINTS, INPUT_MT_DIRECT); if (error) { diff --git a/drivers/input/touchscreen/of_touchscreen.c b/drivers/input/touchscreen/of_touchscreen.c index b82b520..c132624 100644 --- a/drivers/input/touchscreen/of_touchscreen.c +++ b/drivers/input/touchscreen/of_touchscreen.c @@ -14,14 +14,22 @@ #include #include -static u32 of_get_optional_u32(struct device_node *np, - const char *property) +static bool touchscreen_get_property_u32(struct device_node *np, + const char *property, + unsigned int default_value, + unsigned int *value) { u32 val = 0; + int error; - of_property_read_u32(np, property, &val); + error = of_property_read_u32(np, property, &val); + if (error) { + *value = default_value; + return false; + } - return val; + *value = val; + return true; } static void touchscreen_set_params(struct input_dev *dev, @@ -54,34 +62,45 @@ static void touchscreen_set_params(struct input_dev *dev, * input device accordingly. The function keeps previously setuped default * values if no value is specified via DT. */ -void touchscreen_parse_of_params(struct input_dev *dev) +void touchscreen_parse_of_params(struct input_dev *dev, bool multitouch) { struct device_node *np = dev->dev.parent->of_node; - u32 maximum, fuzz; + unsigned int maximum, fuzz; + int axis; + bool present; input_alloc_absinfo(dev); if (!dev->absinfo) return; - maximum = of_get_optional_u32(np, "touchscreen-size-x"); - fuzz = of_get_optional_u32(np, "touchscreen-fuzz-x"); - if (maximum || fuzz) { - touchscreen_set_params(dev, ABS_X, maximum, fuzz); - touchscreen_set_params(dev, ABS_MT_POSITION_X, maximum, fuzz); - } + axis = multitouch ? ABS_MT_POSITION_X : ABS_X; + data_present = touchscreen_get_prop_u32(np, "touchscreen-size-x", + input_abs_get_maximum(axis), + &maximum) | + touchscreen_get_prop_u32(np, "touchscreen-fuzz-x", + input_abs_get_fuzz(axis), + &fuzz); + if (data_present) + touchscreen_set_params(dev, axis, maximum, fuzz); - maximum = of_get_optional_u32(np, "touchscreen-size-y"); - fuzz = of_get_optional_u32(np, "touchscreen-fuzz-y"); - if (maximum || fuzz) { - touchscreen_set_params(dev, ABS_Y, maximum, fuzz); - touchscreen_set_params(dev, ABS_MT_POSITION_Y, maximum, fuzz); - } + axis = multitouch ? ABS_MT_POSITION_Y : ABS_Y; + data_present = touchscreen_get_prop_u32(np, "touchscreen-size-y", + input_abs_get_maximum(axis), + &maximum) | + touchscreen_get_prop_u32(np, "touchscreen-fuzz-y", + input_abs_get_fuzz(axis), + &fuzz); + if (data_present) + touchscreen_set_params(dev, axis, maximum, fuzz); - maximum = of_get_optional_u32(np, "touchscreen-max-pressure"); - fuzz = of_get_optional_u32(np, "touchscreen-fuzz-pressure"); - if (maximum || fuzz) { - touchscreen_set_params(dev, ABS_PRESSURE, maximum, fuzz); - touchscreen_set_params(dev, ABS_MT_PRESSURE, maximum, fuzz); - } + axis = multitouch ? ABS_MT_PRESSURE : ABS_PRESSURE; + data_present = touchscreen_get_prop_u32(np, "touchscreen-max-pressure", + input_abs_get_maximum(axis), + &maximum) | + touchscreen_get_prop_u32(np, "touchscreen-fuzz-pressure", + input_abs_get_fuzz(axis), + &fuzz); + if (data_present) + touchscreen_set_params(dev, axis, maximum, fuzz); } EXPORT_SYMBOL(touchscreen_parse_of_params); diff --git a/drivers/input/touchscreen/tsc2005.c b/drivers/input/touchscreen/tsc2005.c index 72657c5..d8c025b 100644 --- a/drivers/input/touchscreen/tsc2005.c +++ b/drivers/input/touchscreen/tsc2005.c @@ -709,7 +709,7 @@ static int tsc2005_probe(struct spi_device *spi) input_set_abs_params(input_dev, ABS_PRESSURE, 0, max_p, fudge_p, 0); if (np) - touchscreen_parse_of_params(input_dev); + touchscreen_parse_of_params(input_dev, false); input_dev->open = tsc2005_open; input_dev->close = tsc2005_close; diff --git a/include/linux/input/touchscreen.h b/include/linux/input/touchscreen.h index 08a5ef6..eecc9ea 100644 --- a/include/linux/input/touchscreen.h +++ b/include/linux/input/touchscreen.h @@ -12,9 +12,10 @@ #include #ifdef CONFIG_OF -void touchscreen_parse_of_params(struct input_dev *dev); +void touchscreen_parse_of_params(struct input_dev *dev, bool multitouch); #else -static inline void touchscreen_parse_of_params(struct input_dev *dev) +static inline void touchscreen_parse_of_params(struct input_dev *dev, + bool multitouch) { } #endif