From patchwork Wed May 13 07:50:09 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rini van Zetten X-Patchwork-Id: 27150 X-Patchwork-Delegate: galak@kernel.crashing.org Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 3FA50B707C for ; Wed, 13 May 2009 17:58:04 +1000 (EST) Received: by ozlabs.org (Postfix) id 13A42DE22B; Wed, 13 May 2009 17:57:46 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from ozlabs.org (localhost [127.0.0.1]) by ozlabs.org (Postfix) with ESMTP id 11CCDDE22A for ; Wed, 13 May 2009 17:57:46 +1000 (EST) X-Original-To: linuxppc-dev@ozlabs.org Delivered-To: linuxppc-dev@ozlabs.org X-Greylist: delayed 432 seconds by postgrey-1.31 at ozlabs; Wed, 13 May 2009 17:57:29 EST Received: from smtp0.euronet.nl (smtp0.euronet.nl [194.134.35.141]) by ozlabs.org (Postfix) with ESMTP id 6DDB4DDFC2 for ; Wed, 13 May 2009 17:57:29 +1000 (EST) Received: from arv-010 (mf-22dc1.mxs.adsl.euronet.nl [81.70.75.193]) by smtp0.euronet.nl (Postfix) with ESMTP id 9DA386EAF1; Wed, 13 May 2009 09:50:14 +0200 (MEST) Received: from arv-010 (localhost [127.0.0.1]) by arv-010 (Postfix) with ESMTP id 3209232C95; Wed, 13 May 2009 09:50:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=arvoo.nl; h=message-id :date:from:mime-version:to:subject:content-type: content-transfer-encoding; s=arv-010; bh=oXuiBz1zCQmRcMFYQO3w8co 6WUM=; b=PrnXmA2UASXQyWCHBCgBmeO7T5iVjvB57H6VGkPrSLt71N8M5xpshU8 xcTXN0u4NdWvQpZUrju6G6sDnkPhdld+uLUjrJPmj4bQNHnh5rgOdoGo7Z4jAyS9 EqW8I3tzsXarCydBX9gq+mJ0ibJiNpNUS6fUelLx7SeU8TgMLaoM= Received: from arv-002.arvoo.nl (unknown [192.168.0.2]) by arv-010 (Postfix) with ESMTP id ACF9832C95; Wed, 13 May 2009 09:50:09 +0200 (CEST) Received: from [192.168.0.72] (unknown [192.168.0.72]) by arv-002.arvoo.nl (Postfix) with ESMTP id 8EDAB1802097D; Wed, 13 May 2009 09:50:09 +0200 (CEST) Message-ID: <4A0A7BB1.8070701@arvoo.nl> Date: Wed, 13 May 2009 09:50:09 +0200 From: Rini van Zetten User-Agent: Thunderbird 2.0.0.21 (X11/20090409) MIME-Version: 1.0 To: galak@kernel.crashing.org, spi-devel-general@lists.sourceforge.net, Linuxppc-dev@ozlabs.org Subject: [PATCH][POWERPC] mpc83xx : allow SPI without cs. X-ARVOO-MailScanner-Information: Please contact the ISP for more information X-MailScanner-ID: ACF9832C95.30994 X-ARVOO-MailScanner: Found to be clean X-ARVOO-MailScanner-SpamCheck: not spam, SpamAssassin (not cached, score=-5.8, required 5, autolearn=not spam, ALL_TRUSTED -1.80, BAYES_00 -4.00) X-ARVOO-MailScanner-From: rini@arvoo.nl X-Spam-Status: No X-BeenThere: linuxppc-dev@ozlabs.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org This patch adds the possibility to have a spi device without a cs. For example, the dts file should look something like this: spi-controller { gpios = <&pio1 1 0 /* cs0 */ 0 /* cs1, no GPIO */ &pio2 2 0>; /* cs2 */ Signed-off-by: Rini van Zetten --- drivers/spi/spi_mpc83xx.c | 44 +++++++++++++++++++++++--------------------- 1 files changed, 23 insertions(+), 21 deletions(-) diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c index f4573a9..d06027e 100644 --- a/drivers/spi/spi_mpc83xx.c +++ b/drivers/spi/spi_mpc83xx.c @@ -687,9 +687,10 @@ static void mpc83xx_spi_cs_control(struct spi_device *spi, bool on) struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data); u16 cs = spi->chip_select; int gpio = pinfo->gpios[cs]; - bool alow = pinfo->alow_flags[cs]; - - gpio_set_value(gpio, on ^ alow); + if ( gpio != -EEXIST ) { + bool alow = pinfo->alow_flags[cs]; + gpio_set_value(gpio, on ^ alow); + } } static int of_mpc83xx_spi_get_chipselects(struct device *dev) @@ -728,27 +729,28 @@ static int of_mpc83xx_spi_get_chipselects(struct device *dev) enum of_gpio_flags flags; gpio = of_get_gpio_flags(np, i, &flags); - if (!gpio_is_valid(gpio)) { + if (gpio_is_valid(gpio)) { + ret = gpio_request(gpio, dev_name(dev)); + if (ret) { + dev_err(dev, "can't request gpio #%d: %d\n", i, ret); + goto err_loop; + } + pinfo->gpios[i] = gpio; + pinfo->alow_flags[i] = flags & OF_GPIO_ACTIVE_LOW; + + ret = gpio_direction_output(pinfo->gpios[i], + pinfo->alow_flags[i]); + if (ret) { + dev_err(dev, "can't set output direction for gpio " + "#%d: %d\n", i, ret); + goto err_loop; + } + } else if (gpio == -EEXIST) { + pinfo->gpios[i] = -EEXIST; + } else { dev_err(dev, "invalid gpio #%d: %d\n", i, gpio); goto err_loop; } - - ret = gpio_request(gpio, dev_name(dev)); - if (ret) { - dev_err(dev, "can't request gpio #%d: %d\n", i, ret); - goto err_loop; - } - - pinfo->gpios[i] = gpio; - pinfo->alow_flags[i] = flags & OF_GPIO_ACTIVE_LOW; - - ret = gpio_direction_output(pinfo->gpios[i], - pinfo->alow_flags[i]); - if (ret) { - dev_err(dev, "can't set output direction for gpio " - "#%d: %d\n", i, ret); - goto err_loop; - } } pdata->max_chipselect = ngpios;