From patchwork Fri Jul 23 13:52:30 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Cox X-Patchwork-Id: 113899 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.4/8.14.3) with ESMTP id o6NEP06Q018637 for ; Fri, 23 Jul 2010 14:25:02 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760232Ab0GWOY6 (ORCPT ); Fri, 23 Jul 2010 10:24:58 -0400 Received: from mga09.intel.com ([134.134.136.24]:41747 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760231Ab0GWOY5 (ORCPT ); Fri, 23 Jul 2010 10:24:57 -0400 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP; 23 Jul 2010 07:23:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.55,248,1278313200"; d="scan'208";a="538151646" Received: from unknown (HELO localhost.localdomain) ([10.255.13.60]) by orsmga002.jf.intel.com with ESMTP; 23 Jul 2010 07:25:20 -0700 From: Alan Cox Subject: [PATCH 5/6] fix channel allocation in the touch screen driver To: greg@kroah.com, linux-input@vger.kernel.org, dmitry.torokhov@gmail.com Date: Fri, 23 Jul 2010 14:52:30 +0100 Message-ID: <20100723135228.19151.8558.stgit@localhost.localdomain> In-Reply-To: <20100723134852.19151.6999.stgit@localhost.localdomain> References: <20100723134852.19151.6999.stgit@localhost.localdomain> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Fri, 23 Jul 2010 14:25:02 +0000 (UTC) diff --git a/drivers/staging/mrst-touchscreen/intel-mid-touch.c b/drivers/staging/mrst-touchscreen/intel-mid-touch.c index db286eb..760bc7b 100644 --- a/drivers/staging/mrst-touchscreen/intel-mid-touch.c +++ b/drivers/staging/mrst-touchscreen/intel-mid-touch.c @@ -496,8 +496,8 @@ static int __devinit mrstouch_read_pmic_id(uint *vendor, uint *rev) */ static int __devinit mrstouch_chan_parse(struct mrstouch_dev *tsdev) { - int err, i, j, found; - u32 r32; + int err, i, found; + u8 r8; found = -1; @@ -505,15 +505,13 @@ static int __devinit mrstouch_chan_parse(struct mrstouch_dev *tsdev) if (found >= 0) break; - err = intel_scu_ipc_ioread32(PMICADDR0, &r32); + err = intel_scu_ipc_ioread8(PMICADDR0 + i, &r8); if (err) return err; - for (j = 0; j < 32; j+= 8) { - if (((r32 >> j) & 0xFF) == END_OF_CHANNEL) { - found = i; - break; - } + if (r8 == END_OF_CHANNEL) { + found = i; + break; } } if (found < 0) @@ -535,20 +533,17 @@ static int __devinit mrstouch_chan_parse(struct mrstouch_dev *tsdev) */ static int __devinit mrstouch_ts_chan_set(uint offset) { - int count; u16 chan; - u16 reg[5]; - u8 data[5]; + + int ret, count; chan = PMICADDR0 + offset; for (count = 0; count <= 3; count++) { - reg[count] = chan++; - data[count] = MRST_TS_CHAN10 + count; + ret = intel_scu_ipc_iowrite8(chan++, MRST_TS_CHAN10 + count); + if (ret) + return ret; } - reg[count] = chan; - data[count] = END_OF_CHANNEL; - - return intel_scu_ipc_writev(reg, data, 5); + return intel_scu_ipc_iowrite8(chan++, END_OF_CHANNEL); } /* Initialize ADC */