Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751946AbdHANeU (ORCPT ); Tue, 1 Aug 2017 09:34:20 -0400 Received: from mail.free-electrons.com ([62.4.15.54]:42709 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751773AbdHANeR (ORCPT ); Tue, 1 Aug 2017 09:34:17 -0400 Date: Tue, 1 Aug 2017 15:34:14 +0200 From: Boris Brezillon To: Arnd Bergmann Cc: Wolfram Sang , linux-i2c@vger.kernel.org, Jonathan Corbet , linux-doc@vger.kernel.org, Greg Kroah-Hartman , Przemyslaw Sroka , Arkadiusz Golec , Alan Douglas , Bartosz Folta , Damian Kos , Alicja Jurasik-Urbaniak , Jan Kotas , Cyprian Wronka , Alexandre Belloni , Thomas Petazzoni , Nishanth Menon , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , devicetree@vger.kernel.org, Linux Kernel Mailing List Subject: Re: [RFC 2/5] i3c: Add core I3C infrastructure Message-ID: <20170801153414.6ce34ee8@bbrezillon> In-Reply-To: References: <1501518290-5723-1-git-send-email-boris.brezillon@free-electrons.com> <1501518290-5723-3-git-send-email-boris.brezillon@free-electrons.com> <20170731231509.77d1fba4@bbrezillon> <20170801142936.5df48702@bbrezillon> X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2565 Lines: 59 On Tue, 1 Aug 2017 15:11:44 +0200 Arnd Bergmann wrote: > On Tue, Aug 1, 2017 at 2:29 PM, Boris Brezillon > wrote: > > On Tue, 1 Aug 2017 14:00:05 +0200 > > Arnd Bergmann wrote: > > >> Another argument for a combined bus would be devices that > >> can be attached to either i2c and i3c, depending on the host > >> capabilities. > > > > Hm, that's already the case, isn't it? And you'll anyway need to > > develop specific code for both cases in the I2C/I3C device driver > > because I2C and I3C transfers are different. So I don't see how it > > would help to have a single bus here. > > > >> We have discussed whether i2c and spi should be > >> merged into a single bus_type in the past, as a lot of devices > >> can be attached to either of them. > > > > Oh, really? What's the rational behind that? I mean, I2C and SPI are > > quite different, and even if some devices provide both interfaces, I > > don't see why we should merge them. But you probably had good reasons > > to do so. > > Well, we never changed it, so at least the work required to merge > the two was considered too much to justify any advantages. > > The main problem with having one driver that can operate on > different bus types (i2c plus either spi or i3c) is the handling for > the various combinations in configurations (e.g. I2C=m, SPI=y). > > The easy case is having a module_init function that registers two > device drivers, but that requires having a Kconfig dependency > on both subsystems, and you can't use the module_i2c_driver() > helper. > > The second way is to have a number of #ifdef and complex > Kconfig dependencies for the driver to only register the > device_driver objects for the buses that are enabled. This > is also doable, but everyone gets the logic wrong the first time. Hm, I understand now why you'd prefer to have a single bus. Can't we solve this problem with a module_i3c_i2c_driver() macro that would hide all this complexity from I2C/I3C drivers? > > What we end up doing to work around this for other drivers is > to have the base driver in one library module, and separate > modules for the bus-specific portions, which can then > use module_i2c_driver again. There are many instances > for combined i2c/spi drivers in the kernel, and it works fine, > but it adds a fair bit of overhead compared to having one > driver that would e.g. use regmap to abstract the differences > in the probe() function and otherwise keeps everything in > one place. > > Arnd