Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp774973ybf; Fri, 28 Feb 2020 07:24:29 -0800 (PST) X-Google-Smtp-Source: APXvYqxKjFfksdRZRoUt59q3LR+NfsAlkKk934l35eKXsRpLHxEfO8frxJp0bLL7yJox2uprB6A/ X-Received: by 2002:a9d:67d7:: with SMTP id c23mr3810452otn.262.1582903469343; Fri, 28 Feb 2020 07:24:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582903469; cv=none; d=google.com; s=arc-20160816; b=UdCuUxq+mnsOMIG0aHyo2dRrlflMiPd1t8e1IN3oXVl2DpGFe30cFwqUX59MdLVpzN CqTpoiJPU9RVWhI0j8OkAFsOZ48UriSMmmYU033ANnj7pfW2qQvi0JVWo+t12s6Adb9k vHe8xHuMWT+PqeFZqVZLCt3/9pcqHrDurij4Efd+P1MBeA8r1s11INE/FWpUwdsGtR1v VQJ79bkCuhDmT9AOEaUZLZhGOdvHhaqjvcZ7Zh45ZQKNYBF7ThvvqMIrQw9BCsLpHOOY QAcSPCc5gJHK3asQcWTXV6MuHjuKeLg3tSJ8PcOv7UHUshBFq6M4Ny3hTMdsEJ/ZOaSa xFWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=jYH1lhh9CtnSL5POu0riPDmupxHR+lZHGGp0XODnH50=; b=FjPKXyqAci46Wa8dq6zqg9Xet3SCrSTEAq+u9TBO0E6scaftC+gOjQNecfbFzTPH43 1VSbHI9/sZS7yfC8M7nf0AxsIXlVvukp9aeRp3beS9GoQ/GOB4HO+QjiFT9bT5/l4pto 1H+LqRS2lxU4HXKH8YYfHALRtGepeLvXcmBxheTESBaV7Sjj4yRc93e0Cn56fyQKYLY9 aPDwbp4cO/hwh8SLp5FbHV08V07zyH0DHDEPGo4X45R+1dSmiYh3KLcSAd3APX29DFyS NJu9LcRJFbBSM2dNsY6mhMO00Bf3EoVo5Mc2Gl8+/MnmPymsb6b2SRKprJVs7jwZKtPv Ow5Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r22si1679017otn.192.2020.02.28.07.24.17; Fri, 28 Feb 2020 07:24:29 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727192AbgB1PXN (ORCPT + 99 others); Fri, 28 Feb 2020 10:23:13 -0500 Received: from szxga06-in.huawei.com ([45.249.212.32]:40906 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726940AbgB1PXG (ORCPT ); Fri, 28 Feb 2020 10:23:06 -0500 Received: from DGGEMS414-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id E895CBCDD998B0D1E4CE; Fri, 28 Feb 2020 23:22:53 +0800 (CST) Received: from localhost.localdomain (10.69.192.58) by DGGEMS414-HUB.china.huawei.com (10.3.19.214) with Microsoft SMTP Server id 14.3.439.0; Fri, 28 Feb 2020 23:22:44 +0800 From: John Garry To: CC: , , , , , John Garry Subject: [PATCH RFC 1/3] spi: Allow SPI controller override device buswidth Date: Fri, 28 Feb 2020 23:18:49 +0800 Message-ID: <1582903131-160033-2-git-send-email-john.garry@huawei.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1582903131-160033-1-git-send-email-john.garry@huawei.com> References: <1582903131-160033-1-git-send-email-john.garry@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.58] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently ACPI firmware description for a SPI device does not have any method to describe the data buswidth on the board. So even through the controller and device may support higher modes than standard SPI, it cannot be assumed that the board does - as such, that device is limited to standard SPI in such a circumstance. As a workaround, allow the controller driver supply buswidth override bits, which are used inform the core code that the controller driver knows the buswidth supported on that board for that device. A host controller driver might know this info from DMI tables, for example. Signed-off-by: John Garry --- drivers/spi/spi.c | 4 +++- include/linux/spi/spi.h | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 38b4c78df506..292f26807b41 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -510,6 +510,7 @@ struct spi_device *spi_alloc_device(struct spi_controller *ctlr) spi->dev.bus = &spi_bus_type; spi->dev.release = spidev_release; spi->cs_gpio = -ENOENT; + spi->mode = ctlr->buswidth_override_bits; spin_lock_init(&spi->statistics.lock); @@ -2181,9 +2182,10 @@ static acpi_status acpi_register_spi_device(struct spi_controller *ctlr, return AE_NO_MEMORY; } + ACPI_COMPANION_SET(&spi->dev, adev); spi->max_speed_hz = lookup.max_speed_hz; - spi->mode = lookup.mode; + spi->mode |= lookup.mode; spi->irq = lookup.irq; spi->bits_per_word = lookup.bits_per_word; spi->chip_select = lookup.chip_select; diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 6d16ba01ff5a..600e3793303e 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h @@ -481,6 +481,9 @@ struct spi_controller { /* spi_device.mode flags understood by this controller driver */ u32 mode_bits; + /* spi_device.mode flags override flags for this controller */ + u32 buswidth_override_bits; + /* bitmask of supported bits_per_word for transfers */ u32 bits_per_word_mask; #define SPI_BPW_MASK(bits) BIT((bits) - 1) -- 2.17.1