From patchwork Mon Jul 5 20:06:51 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Grazvydas Ignotas X-Patchwork-Id: 110284 X-Patchwork-Delegate: tony@atomide.com 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 o65K7CEV011669 for ; Mon, 5 Jul 2010 20:07:12 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751551Ab0GEUHL (ORCPT ); Mon, 5 Jul 2010 16:07:11 -0400 Received: from mail-ew0-f46.google.com ([209.85.215.46]:47419 "EHLO mail-ew0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751299Ab0GEUHK (ORCPT ); Mon, 5 Jul 2010 16:07:10 -0400 Received: by ewy23 with SMTP id 23so1680600ewy.19 for ; Mon, 05 Jul 2010 13:07:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer; bh=d3Z0Z4I3Sp4kUIQJziEk6lbalQNJkwNWODhxo6TQDd0=; b=PAreRq90dTVXkcFfai76vG42Ry+AxNOmR3He9tyFQ7nj6Ft+5i92Z3WuKyP6eudTcB oLZYn+y6+FwO74Y3dnM0QQpv6dGx2Ywo/IVS/gaamfOZmk2Pk0j4ga7I65fBE7ddgKC2 fpxKqfPw8efp+hy4HMfdbXYBrSw/d0wWeT2jE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=svlEeRqsGexq6wSMPa8UERPvmbfMkTWL6DdsU7ByX2cZwYPnfnHA8WM3NBU6l+jiG6 BNA/WEyTRQUH3IIoVxXufe4PZ5y4qxrdankF6fsFFX7ZejzCOrQl7rOOhWZT9OeXQwdx CtWuMZLU9UZC5KqxHuAlrq9GZDjY8U5vY03ZE= Received: by 10.213.10.67 with SMTP id o3mr2779360ebo.31.1278360428985; Mon, 05 Jul 2010 13:07:08 -0700 (PDT) Received: from localhost.localdomain (ip-88-119-226-136.static.b4net.lt [88.119.226.136]) by mx.google.com with ESMTPS id v59sm38194988eeh.10.2010.07.05.13.07.07 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 05 Jul 2010 13:07:08 -0700 (PDT) From: Grazvydas Ignotas To: linux-omap@vger.kernel.org Cc: Tony Lindgren , Grazvydas Ignotas Subject: [PATCH] omap: mux: fix multipath gpio handling Date: Mon, 5 Jul 2010 23:06:51 +0300 Message-Id: <1278360411-25797-1-git-send-email-notasas@gmail.com> X-Mailer: git-send-email 1.6.3.3 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@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]); Mon, 05 Jul 2010 20:07:13 +0000 (UTC) diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index be52fab..ab403b2 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c @@ -87,6 +87,9 @@ static char *omap_mux_options; int __init omap_mux_init_gpio(int gpio, int val) { struct omap_mux_entry *e; + struct omap_mux *gpio_mux; + u16 old_mode; + u16 mux_mode; int found = 0; if (!gpio) @@ -95,34 +98,33 @@ int __init omap_mux_init_gpio(int gpio, int val) list_for_each_entry(e, &muxmodes, node) { struct omap_mux *m = &e->mux; if (gpio == m->gpio) { - u16 old_mode; - u16 mux_mode; - - old_mode = omap_mux_read(m->reg_offset); - mux_mode = val & ~(OMAP_MUX_NR_MODES - 1); - if (omap_mux_flags & MUXABLE_GPIO_MODE3) - mux_mode |= OMAP_MUX_MODE3; - else - mux_mode |= OMAP_MUX_MODE4; - printk(KERN_DEBUG "mux: Setting signal " - "%s.gpio%i 0x%04x -> 0x%04x\n", - m->muxnames[0], gpio, old_mode, mux_mode); - omap_mux_write(mux_mode, m->reg_offset); + gpio_mux = m; found++; } } - if (found == 1) - return 0; + if (found == 0) { + printk(KERN_ERR "mux: Could not set gpio%i\n", gpio); + return -ENODEV; + } if (found > 1) { - printk(KERN_ERR "mux: Multiple gpio paths for gpio%i\n", gpio); + printk(KERN_INFO "mux: Multiple gpio paths (%d) for gpio%i\n", + found, gpio); return -EINVAL; } - printk(KERN_ERR "mux: Could not set gpio%i\n", gpio); + old_mode = omap_mux_read(gpio_mux->reg_offset); + mux_mode = val & ~(OMAP_MUX_NR_MODES - 1); + if (omap_mux_flags & MUXABLE_GPIO_MODE3) + mux_mode |= OMAP_MUX_MODE3; + else + mux_mode |= OMAP_MUX_MODE4; + printk(KERN_DEBUG "mux: Setting signal %s.gpio%i 0x%04x -> 0x%04x\n", + gpio_mux->muxnames[0], gpio, old_mode, mux_mode); + omap_mux_write(mux_mode, gpio_mux->reg_offset); - return -ENODEV; + return 0; } int __init omap_mux_init_signal(char *muxname, int val)