From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755393AbcFQH5h (ORCPT ); Fri, 17 Jun 2016 03:57:37 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:56971 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754094AbcFQH5c (ORCPT ); Fri, 17 Jun 2016 03:57:32 -0400 X-AuditID: cbfee690-f79056d000001327-ee-5763ad691898 From: Andi Shyti To: Mark Brown Cc: Kukjin Kim , Krzysztof Kozlowski , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Andi Shyti , Andi Shyti Subject: [PATCH 2/5] spi: s3c64xx: group the CS signalling writes in a single function Date: Fri, 17 Jun 2016 16:57:22 +0900 Message-id: <1466150245-2648-3-git-send-email-andi.shyti@samsung.com> X-Mailer: git-send-email 2.8.1 In-reply-to: <1466150245-2648-1-git-send-email-andi.shyti@samsung.com> References: <1466150245-2648-1-git-send-email-andi.shyti@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPLMWRmVeSWpSXmKPExsWyRsSkWDdzbXK4wZLnshbbjzxjtVj84zmT xdSHT9gsXr8wtOh//JrZYtPja6wWl3fNYbNo/HiT3YHD4/qST8wem1Z1snlsXlLv0bdlFaPH 501yAaxRXDYpqTmZZalF+nYJXBlTpm9jLjgkWtH3/ThrA+NioS5GTg4JAROJ1h8T2SBsMYkL 99YD2VwcQgIrGCWW3+1lhSma0LOPGSIxi1Fi5r6nTBDOR0aJK8vWsIBUsQloSjTd/gE2SkRA WeLq970sIEXMAj8ZJa7eaQUrEhaIkFjS1gk2lkVAVeLf5lmMIDavgKtEz7fTzBDr5CQuT38A NohTwE1i4ZXPQDUcQNtcJS6+1ASZKSGwjF1i0uTl7BBzBCS+TT7EAlIjISArsekA1BhJiYMr brBMYBRewMiwilE0tSC5oDgpvchErzgxt7g0L10vOT93EyMw3E//ezZhB+O9A9aHGAU4GJV4 eCOkksOFWBPLiitzDzGaAm2YyCwlmpwPjKq8knhDYzMjC1MTU2Mjc0szJXHe11I/g4UE0hNL UrNTUwtSi+KLSnNSiw8xMnFwSjUwim1JbmLlz8ncsj7++O5sifQJWWJ5pdYhOn0fGHfk7Zu1 Uqjr60djrR/nZtdUzv/XN///18ScKftLW7RPmH+dufTKPP2tTupJS2uEXAXFr65/O3Pi5RmR fo+nnDdtm5A8v/zYvs3KhUeTjQ10JV9PDHrUeHSnbn+KxWnBX5tYVrL8+Menq9fWoMRSnJFo qMVcVJwIAKtohNRyAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrDIsWRmVeSWpSXmKPExsVy+t9jQd3MtcnhBsfOSVhsP/KM1WLxj+dM FlMfPmGzeP3C0KL/8Wtmi02Pr7FaXN41h82i8eNNdgcOj+tLPjF7bFrVyeaxeUm9R9+WVYwe nzfJBbBGNTDaZKQmpqQWKaTmJeenZOal2yp5B8c7x5uaGRjqGlpamCsp5CXmptoqufgE6Lpl 5gCdoqRQlphTChQKSCwuVtK3wzQhNMRN1wKmMULXNyQIrsfIAA0krGHMmDJ9G3PBIdGKvu/H WRsYFwt1MXJySAiYSEzo2ccMYYtJXLi3nq2LkYtDSGAWo8TMfU+ZIJyPjBJXlq1hAaliE9CU aLr9gw3EFhFQlrj6fS8LSBGzwE9Giat3WsGKhAUiJJa0dbKC2CwCqhL/Ns9iBLF5BVwler6d hlonJ3F5+gOwQZwCbhILr3wGquEA2uYqcfGl5gRG3gWMDKsYJVILkguKk9JzDfNSy/WKE3OL S/PS9ZLzczcxgmPqmdQOxoO73A8xCnAwKvHw7lBODhdiTSwrrsw9xCjBwawkwsu4CijEm5JY WZValB9fVJqTWnyI0RToronMUqLJ+cB4zyuJNzQ2MTOyNDI3tDAyNlcS5338f12YkEB6Yklq dmpqQWoRTB8TB6dUA6OI4lFru0Nvf93iPtTaMvlTOUvGrLuqV9Pecla8Wz3V4I/pY+N8/3cW wV89J6/V3Lbacz3znm+W+t/VGefk3znpMOWtQmXqwYN7uA953r9YsWL395IFJ2ceEz1s8ztU flFtkWLc5GR3Rq+JTHx8tyYeL615fCs2b2Vz7MlZy+OCPZMVjGblGt5UYinOSDTUYi4qTgQA CcGL4L8CAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To enable/disable the CS line, the driver performs a writel in the S3C64XX_SPI_SLAVE_SEL registers. Put together all the writes in that register in a single function. Signed-off-by: Andi Shyti --- drivers/spi/spi-s3c64xx.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c index 5a76a50..972367d 100644 --- a/drivers/spi/spi-s3c64xx.c +++ b/drivers/spi/spi-s3c64xx.c @@ -310,6 +310,28 @@ static void prepare_dma(struct s3c64xx_spi_dma_data *dma, dma_async_issue_pending(dma->ch); } +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 (enable) { + if (!(sdd->port_conf->quirks & S3C64XX_SPI_QUIRK_CS_AUTO)) { + writel(0, sdd->regs + S3C64XX_SPI_SLAVE_SEL); + } else { + u32 ssel = readl(sdd->regs + S3C64XX_SPI_SLAVE_SEL); + + ssel |= (S3C64XX_SPI_SLAVE_AUTO | + S3C64XX_SPI_SLAVE_NSC_CNT_2); + writel(ssel, sdd->regs + S3C64XX_SPI_SLAVE_SEL); + } + } else { + if (!(sdd->port_conf->quirks & S3C64XX_SPI_QUIRK_CS_AUTO)) + writel(S3C64XX_SPI_SLAVE_SIG_INACT, + sdd->regs + S3C64XX_SPI_SLAVE_SEL); + } +} + static int s3c64xx_spi_prepare_transfer(struct spi_master *spi) { struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(spi); @@ -706,12 +728,7 @@ static int s3c64xx_spi_transfer_one(struct spi_master *master, enable_datapath(sdd, spi, xfer, use_dma); /* Start the signals */ - if (!(sdd->port_conf->quirks & S3C64XX_SPI_QUIRK_CS_AUTO)) - writel(0, sdd->regs + S3C64XX_SPI_SLAVE_SEL); - else - writel(readl(sdd->regs + S3C64XX_SPI_SLAVE_SEL) - | S3C64XX_SPI_SLAVE_AUTO | S3C64XX_SPI_SLAVE_NSC_CNT_2, - sdd->regs + S3C64XX_SPI_SLAVE_SEL); + s3c64xx_spi_set_cs(spi, true); spin_unlock_irqrestore(&sdd->lock, flags); @@ -861,16 +878,15 @@ static int s3c64xx_spi_setup(struct spi_device *spi) pm_runtime_mark_last_busy(&sdd->pdev->dev); pm_runtime_put_autosuspend(&sdd->pdev->dev); - if (!(sdd->port_conf->quirks & S3C64XX_SPI_QUIRK_CS_AUTO)) - writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd->regs + S3C64XX_SPI_SLAVE_SEL); + s3c64xx_spi_set_cs(spi, false); + return 0; setup_exit: pm_runtime_mark_last_busy(&sdd->pdev->dev); pm_runtime_put_autosuspend(&sdd->pdev->dev); /* setup() returns with device de-selected */ - if (!(sdd->port_conf->quirks & S3C64XX_SPI_QUIRK_CS_AUTO)) - writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd->regs + S3C64XX_SPI_SLAVE_SEL); + s3c64xx_spi_set_cs(spi, false); if (gpio_is_valid(spi->cs_gpio)) gpio_free(spi->cs_gpio); -- 2.8.1