From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753545AbdFPKJm (ORCPT ); Fri, 16 Jun 2017 06:09:42 -0400 Received: from regular1.263xmail.com ([211.150.99.132]:46824 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753398AbdFPKJk (ORCPT ); Fri, 16 Jun 2017 06:09:40 -0400 X-263anti-spam: X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-ABS-CHECKED: 4 X-RL-SENDER: wxt@rock-chips.com X-FST-TO: linux-arm-kernel@lists.infradead.org X-SENDER-IP: 103.29.142.67 X-LOGIN-NAME: wxt@rock-chips.com X-UNIQUE-TAG: X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Subject: Re: [PATCH v3 1/3] spi: rockchip: add support for "cs-gpios" dts property To: Jeffy Chen , broonie@kernel.org Cc: linux-kernel@vger.kernel.org, briannorris@chromium.org, heiko@sntech.de, dianders@chromium.org, linux-spi@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org References: <1497411483-23377-1-git-send-email-jeffy.chen@rock-chips.com> From: Caesar Wang Message-ID: <3beb9f49-5275-b14f-02f7-55ff5ca01e90@rock-chips.com> Date: Fri, 16 Jun 2017 18:09:31 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-Version: 1.0 In-Reply-To: <1497411483-23377-1-git-send-email-jeffy.chen@rock-chips.com> Content-Type: text/plain; charset=gbk; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, As the previous discussed on http://crosreview.com/379681, we have hit a failure [0] of ec's xfer, when we support the spi's pd to turn on/off. (Says: support the Sdioaudio pd of rk3399 on http://crosreview.com/378562) [0]: .. [ 5.579694 ] cros-ec-spi spi5.0: EC failed to respond in time [ 5.585784 ] cros-ec-spi spi5.0: Transfer error 1/3: -110 .. Feels like that a workaround way to fix it, but that should be a good solution. 在 2017年06月14日 11:38, Jeffy Chen 写道: > Support using "cs-gpios" property to specify cs gpios. > > Signed-off-by: Jeffy Chen Tested-by: Caesar Wang I have fetched these patches to test S2R with my board for chromeos4.4. localhost ~ # cat /sys/kernel/debug/pm_genpd/pm_genpd_summary ... pd_sdioaudio on /devices/platform/ff200000.spi suspended /devices/platform/ff880000.i2s active /devices/platform/ff8a0000.i2s suspended -Caesar > --- > > Changes in v3: > include linux/gpio/consumer.h for compile errors on ARCH_X86 > (reported by kbuild test robot ) > > Changes in v2: > 1/ request cs gpios in probe for better error handling > 2/ use gpiod* function > (suggested by Heiko Stuebner) > 3/ split dt-binding changes to new patch > (suggested by Shawn Lin & Heiko Stuebner) > > drivers/spi/spi-rockchip.c | 31 ++++++++++++++++++++++++++++++- > 1 file changed, 30 insertions(+), 1 deletion(-) > > diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c > index bab9b13..4bcf251 100644 > --- a/drivers/spi/spi-rockchip.c > +++ b/drivers/spi/spi-rockchip.c > @@ -16,7 +16,8 @@ > #include > #include > #include > -#include > +#include > +#include > #include > #include > #include > @@ -663,6 +664,27 @@ static bool rockchip_spi_can_dma(struct spi_master *master, > return (xfer->len > rs->fifo_len); > } > > +static int rockchip_spi_setup_cs_gpios(struct device *dev) > +{ > + struct device_node *np = dev->of_node; > + struct gpio_desc *cs_gpio; > + int i, nb; > + > + if (!np) > + return 0; > + > + nb = of_gpio_named_count(np, "cs-gpios"); > + for (i = 0; i < nb; i++) { > + /* We support both GPIO CS and HW CS */ > + cs_gpio = devm_gpiod_get_index_optional(dev, "cs", > + i, GPIOD_ASIS); > + if (IS_ERR(cs_gpio)) > + return PTR_ERR(cs_gpio); > + } > + > + return 0; > +} > + > static int rockchip_spi_probe(struct platform_device *pdev) > { > int ret = 0; > @@ -749,6 +771,7 @@ static int rockchip_spi_probe(struct platform_device *pdev) > master->transfer_one = rockchip_spi_transfer_one; > master->max_transfer_size = rockchip_spi_max_transfer_size; > master->handle_err = rockchip_spi_handle_err; > + master->flags = SPI_MASTER_GPIO_SS; > > rs->dma_tx.ch = dma_request_chan(rs->dev, "tx"); > if (IS_ERR(rs->dma_tx.ch)) { > @@ -783,6 +806,12 @@ static int rockchip_spi_probe(struct platform_device *pdev) > master->dma_rx = rs->dma_rx.ch; > } > > + ret = rockchip_spi_setup_cs_gpios(&pdev->dev); > + if (ret) { > + dev_err(&pdev->dev, "Failed to setup cs gpios\n"); > + goto err_free_dma_rx; > + } > + > ret = devm_spi_register_master(&pdev->dev, master); > if (ret) { > dev_err(&pdev->dev, "Failed to register master\n"); >