From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755999AbbHYSVk (ORCPT ); Tue, 25 Aug 2015 14:21:40 -0400 Received: from smtp.domeneshop.no ([194.63.252.55]:56172 "EHLO smtp.domeneshop.no" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752923AbbHYSVh (ORCPT ); Tue, 25 Aug 2015 14:21:37 -0400 Subject: Re: [PATCH RFC 2/2] staging: fbtft: fix 9-bit SPI support detection To: Stefan Wahren , Thomas Petazzoni References: <1440441228-27113-1-git-send-email-stefan.wahren@i2se.com> <1440441228-27113-3-git-send-email-stefan.wahren@i2se.com> <55DB9405.1080806@tronnes.org> <1273684089.140410.1440524095600.JavaMail.open-xchange@oxbsltgw04.schlund.de> Cc: Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Henri Chain , devel@driverdev.osuosl.org, Mark Brown From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Message-ID: <55DCB229.9010403@tronnes.org> Date: Tue, 25 Aug 2015 20:21:29 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <1273684089.140410.1440524095600.JavaMail.open-xchange@oxbsltgw04.schlund.de> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Den 25.08.2015 19:34, skrev Stefan Wahren: >> Noralf Trønnes hat am 25. August 2015 um 00:00 >> geschrieben: >> >> >> >> Den 24.08.2015 20:33, skrev Stefan Wahren: >>> Since bits_per_word isn't usually checked during SPI setup the 9-bit >>> support must be checked manually. >>> >>> Signed-off-by: Stefan Wahren >>> --- >>> drivers/staging/fbtft/fbtft-core.c | 7 +++++++ >>> drivers/staging/fbtft/flexfb.c | 7 +++++++ >>> 2 files changed, 14 insertions(+) >>> >>> diff --git a/drivers/staging/fbtft/fbtft-core.c >>> b/drivers/staging/fbtft/fbtft-core.c >>> index 3638554..bd71487 100644 >>> --- a/drivers/staging/fbtft/fbtft-core.c >>> +++ b/drivers/staging/fbtft/fbtft-core.c >>> @@ -1438,6 +1438,13 @@ int fbtft_probe_common(struct fbtft_display *display, >>> if (par->spi && display->buswidth == 9) { >>> par->spi->bits_per_word = 9; >>> ret = spi_setup(par->spi); >>> + if (!ret) { >>> + struct spi_master *ma = par->spi->master; >>> + >>> + if (!(ma->bits_per_word_mask & SPI_BPW_MASK(9))) >>> + ret = -EINVAL; >>> + } >>> + >>> if (ret) { >> There's no point in calling spi_setup() when it doesn't check bits_per_word. > If checking of bits_per_word is the only intention of the setup call, then i > agree. > But i'm not sure it is safe to remove the setup call complete. > > Couldn't this cause regressions since there is no common spi setup call for all > drivers? spi_add_device() calls spi_setup() for all spi devices so it's already done. If spi_setup() did something with bits_per_word, then I agree that we should call it in the 9-bit case. But this is not the case, and it's possible to change bits_per_word per transfer later, so I can't see that this is needed. >> Apparently this changed with the commit: >> spi: convert drivers to use bits_per_word_mask. >> This has not been detected earlier, because FBTFT was previously mostly >> used on the Raspberry Pi which had a downstream SPI driver that did this >> check. >> >> How about this: >> >> - par->spi->bits_per_word = 9; >> - ret = par->spi->master->setup(par->spi); >> + if (par->spi->master->bits_per_word_mask & >> SPI_BPW_MASK(9)) { >> + par->spi->bits_per_word = 9; >> - if (ret) { >> + } else { >> dev_warn(&par->spi->dev, >> "9-bit SPI not available, emulating >> using 8-bit.\n"); >> - par->spi->bits_per_word = 8; > I think this assignment should stay. Not needed since we haven't changed the default set by spi_setup(): if (!spi->bits_per_word) spi->bits_per_word = 8; Callchain for DT registered spi devices: spi_register_master->of_register_spi_devices->of_register_spi_device-> spi_add_device->spi_setup