From patchwork Mon Jun 27 10:57:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andi Shyti X-Patchwork-Id: 9200303 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 7F763607D3 for ; Mon, 27 Jun 2016 10:57:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6E80428565 for ; Mon, 27 Jun 2016 10:57:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6295F28581; Mon, 27 Jun 2016 10:57:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9810328565 for ; Mon, 27 Jun 2016 10:57:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751862AbcF0K5U (ORCPT ); Mon, 27 Jun 2016 06:57:20 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:51968 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751764AbcF0K5T (ORCPT ); Mon, 27 Jun 2016 06:57:19 -0400 Received: from epcpsbgr3.samsung.com (u143.gpu120.samsung.co.kr [203.254.230.143]) by mailout2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0O9F01TCNFRGI4B0@mailout2.samsung.com>; Mon, 27 Jun 2016 19:57:16 +0900 (KST) Received: from epcpsbgm1new.samsung.com ( [172.20.52.113]) by epcpsbgr3.samsung.com (EPCPMTA) with SMTP id 2F.ED.05161.C8601775; Mon, 27 Jun 2016 19:57:16 +0900 (KST) X-AuditID: cbfee68f-f79476d000001429-4b-5771068c8680 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1new.samsung.com (EPCPMTA) with SMTP id CD.9E.02101.C8601775; Mon, 27 Jun 2016 19:57:16 +0900 (KST) Received: from samsunx.samsung ([10.113.63.54]) by mmp1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0O9F006DSFRGL140@mmp1.samsung.com>; Mon, 27 Jun 2016 19:57:16 +0900 (KST) Date: Mon, 27 Jun 2016 19:57:16 +0900 From: Andi Shyti To: Mark Brown Cc: Andi Shyti , Kukjin Kim , Krzysztof Kozlowski , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 1/5] spi: do not fail if the CS line is not connected Message-id: <20160627105716.GA7240@samsunx.samsung> References: <1466150245-2648-1-git-send-email-andi.shyti@samsung.com> <1466150245-2648-2-git-send-email-andi.shyti@samsung.com> <20160617104725.GC26099@sirena.org.uk> <20160617113622.GA10760@jack.zhora.eu> <20160617122803.GN26099@sirena.org.uk> <20160619060902.GB424@jack.zhora.eu> <20160626124843.GP28202@sirena.org.uk> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-disposition: inline In-reply-to: <20160626124843.GP28202@sirena.org.uk> User-Agent: Mutt/1.6.0 (2016-04-01) X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrMIsWRmVeSWpSXmKPExsWyRsSkULeHrTDcYPUmLYvFP54zWUx9+ITN 4vULQ4v+x6+ZLTY9vsZqcXnXHDaLxo832R3YPa4v+cTssWlVJ5vH5iX1Hn1bVjF6fN4kF8Aa xWWTkpqTWZZapG+XwJXxfvZ79oI5MhXTlyxkbWC8I9rFyMkhIWAi8eveZXYIW0ziwr31bF2M XBxCAisYJZa9vc4GUzT58zsWiMRSRokXLyczQzgfGSVmTF4IVsUioCqxbddqVhCbTUBToun2 D7C4iICyxNXve8G6mQUuMUpcO7ACbJ+wgKfEpv+zwBp4BYwlpna3M0FMncMs8XH1FxaIhKDE j8n3wGxmAS2J9TuPM0HY0hKP/s4AG8QJ1Px75Vmgkzg4RIG23V0WBDJHQuAcu8SjS7+ZIK4T kPg2+RALSI2EgKzEpgPMEK9JShxccYNlAqPYLCTbZiHZNgvJtgWMzKsYRVMLkguKk9KLjPWK E3OLS/PS9ZLzczcxAuPu9L9n/TsY7x6wPsQowMGoxMN7QaYgXIg1say4MvcQoynQFROZpUST 84HRnVcSb2hsZmRhamJqbGRuaaYkzrtQ6mewkEB6YklqdmpqQWpRfFFpTmrxIUYmDk6pBkY1 Aed1H1bcW3H+kKGxwHNWG6WiiIa9qcY7DxxqzN3qPOc4w0u2ZI8tdZ/3SLff3hVyNdA8wVD5 ccDbLZJvLcpzrgkcaZ347LnyxGijNU1yJ/R4LftnTiw7lzuDY5GOqLYU+/uYg9fayu9q/0/u XXPsx9PmGw8XHy1S1XPc2V/w+4+E/nwJ3l4lluKMREMt5qLiRABSv3CotgIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrAIsWRmVeSWpSXmKPExsVy+t9jAd0etsJwg3eXVSwW/3jOZDH14RM2 i9cvDC36H79mttj0+BqrxeVdc9gsGj/eZHdg97i+5BOzx6ZVnWwem5fUe/RtWcXo8XmTXABr VAOjTUZqYkpqkUJqXnJ+SmZeuq2Sd3C8c7ypmYGhrqGlhbmSQl5ibqqtkotPgK5bZg7QFUoK ZYk5pUChgMTiYiV9O0wTQkPcdC1gGiN0fUOC4HqMDNBAwhrGjPez37MXzJGpmL5kIWsD4x3R LkZODgkBE4nJn9+xQNhiEhfurWfrYuTiEBJYyijx4uVkZgjnI6PEjMkL2UCqWARUJbbtWs0K YrMJaEo03f4BFhcRUJa4+n0vC0gDs8AlRolrB1awgySEBTwlNv2fBdbAK2AsMbW7nQli6hxm iY+rv7BAJAQlfky+B2YzC2hJrN95nAnClpZ49HcG2CBOoObfK88CncTBIQq07e6yoAmMArOQ dM9C0j0LSfcCRuZVjBKpBckFxUnpuYZ5qeV6xYm5xaV56XrJ+bmbGMGx/UxqB+PBXe6HGAU4 GJV4eBfYFoQLsSaWFVfmHmKU4GBWEuF9z1oYLsSbklhZlVqUH19UmpNafIjRFBgiE5mlRJPz gWknryTe0NjEzMjSyNzQwsjYXEmc9/H/dWFCAumJJanZqakFqUUwfUwcnFINjMt1V67VbJdY n3KhSZIzb9OqxbxCez05m5YmmZuIikVPzwkIvsG9OLhMTUetfcsV9WUmfewfgha/2sawIZFL Jvq0wbkgs1d7p7OvyDwpEhYndt+7NepW7cq4yRua619ns1rztgvWOS29tYnxQJ5JkQHjB6XH n2csnL7N8tw2v/RJWzS4+7KuKbEUZyQaajEXFScCAKVrCbUDAwAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi Mark, > > > > This is true, but there are cases where the CS is not connected > > > > and this case needs to be treated separately to allow the device > > > > to work. > > > > In what way? It is just as easy for a device with no physical chip > > > select to have a logical chip select of 0 that it does nothing with as > > > it is for that device to handle any other number. > > > That is indeed my case: the s3c64xx doesn't send anything, unless > > I manually enable CS (from the next patches I need to write '0' > > in the CS register). But I need smoething to tell to the > > device that the CS line is not connected, for example a flag in > > the DTS. > > I'm sorry but I just don't understand what you're saying here. You are > saying that there is no chip select but you need to enable the chip > select? yes, sorry, I have to admit that didn't explain myself properly, but code speaks better than words. What I meant is that if we do not like num-cs = <0>, the unlinked CS line can be handled only this way (case of the s3c64xx driver): Which is not something I like, because it means adding a new flag in the dts. What I want to suggest, instead, is to slightly change the logic behind the num-cs property: i.e. if "num-cs = <0>", doesn't necessarily mean that we don't have a CS controller, but, while we can have as many as we wish, non of them is connected. Looking around in the spi drivers, apparently I am not the only one who has this need, as I pointed out in my previous mail. Thanks a lot, Andi --- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/Documentation/devicetree/bindings/spi/spi-samsung.txt b/Documentation/devicetree/bindings/spi/spi-samsung.txt index 6dbdeb3..62f19b6 100644 --- a/Documentation/devicetree/bindings/spi/spi-samsung.txt +++ b/Documentation/devicetree/bindings/spi/spi-samsung.txt @@ -40,6 +40,9 @@ Optional Board Specific Properties: - cs-gpios: should specify GPIOs used for chipselects (see spi-bus.txt) +- broken-cs: the CS line is disconnected, therefore the device should not wait + for the CS protocol to be established + SPI Controller specific data in SPI slave nodes: - The spi slave nodes should provide the following information which is required diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c index 972367d..5e6ad59 100644 --- a/drivers/spi/spi-s3c64xx.c +++ b/drivers/spi/spi-s3c64xx.c @@ -315,6 +315,9 @@ static void s3c64xx_spi_set_cs(struct spi_device *spi, bool enable) struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(spi->master); + if (sdd->cntrlr_info->broken_cs) + return; + if (enable) { if (!(sdd->port_conf->quirks & S3C64XX_SPI_QUIRK_CS_AUTO)) { writel(0, sdd->regs + S3C64XX_SPI_SLAVE_SEL); [ ... ] @@ -1015,6 +1020,8 @@ static struct s3c64xx_spi_info *s3c64xx_spi_parse_dt(struct device *dev) sci->num_cs = temp; } + sci->broken_cs = of_property_read_bool(dev->of_node, "broken-cs"); + return sci; } #else diff --git a/include/linux/platform_data/spi-s3c64xx.h b/include/linux/platform_data/spi-s3c64xx.h index fb5625b..75793b9 100644 --- a/include/linux/platform_data/spi-s3c64xx.h +++ b/include/linux/platform_data/spi-s3c64xx.h @@ -38,6 +38,7 @@ struct s3c64xx_spi_csinfo { struct s3c64xx_spi_info { int src_clk_nr; int num_cs; + bool broken_cs; int (*cfg_gpio)(void); dma_filter_fn filter; void *dma_tx;