linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Pali Rohár" <pali.rohar@gmail.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: "Benjamin Tissoires" <benjamin.tissoires@redhat.com>,
	"Michał Kępień" <kernel@kempniu.pl>,
	"Jean Delvare" <jdelvare@suse.com>,
	"Wolfram Sang" <wsa@the-dreams.de>,
	"Steven Honeyman" <stevenhoneyman@gmail.com>,
	Valdis.Kletnieks@vt.edu,
	"Jochen Eisinger" <jochen@penguin-breeder.org>,
	"Gabriele Mazzotta" <gabriele.mzt@gmail.com>,
	"Andy Lutomirski" <luto@kernel.org>,
	Mario_Limonciello@dell.com, "Alex Hung" <alex.hung@canonical.com>,
	"Takashi Iwai" <tiwai@suse.de>,
	linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org,
	platform-driver-x86@vger.kernel.org
Subject: Re: [PATCH] i2c: i801: Register optional lis3lv02d i2c device on Dell machines
Date: Tue, 3 Jan 2017 21:05:51 +0100	[thread overview]
Message-ID: <201701032105.51144@pali> (raw)
In-Reply-To: <20170103194812.GD16032@dtor-ws>

[-- Attachment #1: Type: Text/Plain, Size: 9473 bytes --]

On Tuesday 03 January 2017 20:48:12 Dmitry Torokhov wrote:
> On Tue, Jan 03, 2017 at 07:50:17PM +0100, Pali Rohár wrote:
> > On Tuesday 03 January 2017 19:38:43 Dmitry Torokhov wrote:
> > > On Tue, Jan 03, 2017 at 10:06:41AM +0100, Benjamin Tissoires
> > > wrote:
> > > > On Dec 29 2016 or thereabouts, Pali Rohár wrote:
> > > > > On Thursday 29 December 2016 22:09:32 Michał Kępień wrote:
> > > > > > > On Thursday 29 December 2016 14:47:19 Michał Kępień wrote:
> > > > > > > > > On Thursday 29 December 2016 09:29:36 Michał Kępień
> > > > > > > > > wrote:
> > > > > > > > > > > Dell platform team told us that some (DMI
> > > > > > > > > > > whitelisted) Dell Latitude machines have ST
> > > > > > > > > > > microelectronics accelerometer at i2c address
> > > > > > > > > > > 0x29. That i2c address is not specified in DMI
> > > > > > > > > > > or ACPI, so runtime detection without whitelist
> > > > > > > > > > > which is below is not possible.
> > > > > > > > > > > 
> > > > > > > > > > > Presence of that ST microelectronics
> > > > > > > > > > > accelerometer is verified by existence of
> > > > > > > > > > > SMO88xx ACPI device which represent that
> > > > > > > > > > > accelerometer. Unfortunately without i2c
> > > > > > > > > > > address.
> > > > > > > > > > 
> > > > > > > > > > This part of the commit message sounded a bit
> > > > > > > > > > confusing to me at first because there is already
> > > > > > > > > > an ACPI driver which handles SMO88xx
> > > > > > > > > > 
> > > > > > > > > > devices (dell-smo8800).  My understanding is that:
> > > > > > > > > >   * the purpose of this patch is to expose a richer
> > > > > > > > > >   interface (as
> > > > > > > > > >   
> > > > > > > > > >     provided by lis3lv02d) to these devices on some
> > > > > > > > > >     machines,
> > > > > > > > > >   
> > > > > > > > > >   * on whitelisted machines, dell-smo8800 and
> > > > > > > > > >   lis3lv02d can work
> > > > > > > > > >   
> > > > > > > > > >     simultaneously (even though dell-smo8800
> > > > > > > > > >     effectively duplicates the work that lis3lv02d
> > > > > > > > > >     does).
> > > > > > > > > 
> > > > > > > > > No. dell-smo8800 reads from ACPI irq number and
> > > > > > > > > exports /dev/freefall device which notify userspace
> > > > > > > > > about falls. lis3lv02d is i2c driver which exports
> > > > > > > > > axes of accelerometer. Additionaly lis3lv02d can
> > > > > > > > > export also /dev/freefall if registerer of i2c
> > > > > > > > > device provides irq number -- which is not case of
> > > > > > > > > this patch.
> > > > > > > > > 
> > > > > > > > > So both drivers are doing different things and both
> > > > > > > > > are useful.
> > > > > > > > > 
> > > > > > > > > IIRC both dell-smo8800 and lis3lv02d represent one HW
> > > > > > > > > device (that ST microelectronics accelerometer) but
> > > > > > > > > due to complicated HW abstraction and layers on Dell
> > > > > > > > > laptops it is handled by two drivers, one ACPI and
> > > > > > > > > one i2c.
> > > > > > > > > 
> > > > > > > > > Yes, in ideal world irq number should be passed to
> > > > > > > > > lis3lv02d driver and that would export whole device
> > > > > > > > > (with /dev/freefall too), but due to HW abstraction
> > > > > > > > > it is too much complicated...
> > > > > > > > 
> > > > > > > > Why?  AFAICT, all that is required to pass that IRQ
> > > > > > > > number all the way down to lis3lv02d is to set the irq
> > > > > > > > field of the struct i2c_board_info you are passing to
> > > > > > > > i2c_new_device().  And you can extract that IRQ number
> > > > > > > > e.g. in check_acpi_smo88xx_device(). However, you would
> > > > > > > > then need to make sure dell-smo8800 does not attempt to
> > > > > > > > request the same IRQ on whitelisted machines.  This got
> > > > > > > > me thinking about a way to somehow incorporate your
> > > > > > > > changes into dell-smo8800 using Wolfram's bus_notifier
> > > > > > > > suggestion, but I do not have a working solution for
> > > > > > > > now.  What is tempting about this approach is that you
> > > > > > > > would not have to scan the ACPI namespace in search of
> > > > > > > > SMO88xx devices, because smo8800_add() is
> > > > > > > > automatically called for them. However, I fear that
> > > > > > > > the resulting solution may be more complicated than
> > > > > > > > the one you submitted.
> > > > > > > 
> > > > > > > Then we need to deal with lot of problems. Order of
> > > > > > > loading .ko modules is undefined. Binding devices to
> > > > > > > drivers registered by .ko module is also in "random"
> > > > > > > order. At any time any of those .ko module can be
> > > > > > > unloaded or at least device unbind (via sysfs) from
> > > > > > > driver... And there can be some pathological situation
> > > > > > > (thanks to adding ACPI layer as Andy pointed) that there
> > > > > > > will be more SMO88xx devices in ACPI. Plus you can
> > > > > > > compile kernel with and without those modules and also
> > > > > > > you can blacklist loading them (so compile time check is
> > > > > > > not enough). And still some correct message notifier
> > > > > > > must be used.
> > > > > > > 
> > > > > > > I think such solution is much much more complicated,
> > > > > > > there are lot of combinations of kernel configuration
> > > > > > > and available dell devices...
> > > > > > 
> > > > > > I tried a few more things, but ultimately failed to find a
> > > > > > nice way to implement this.
> > > > > > 
> > > > > > Another issue popped up, though.  Linus' master branch
> > > > > > contains a recent commit by Benjamin Tissoires (CC'ed),
> > > > > > 4d5538f5882a ("i2c: use an IRQ to report Host Notify
> > > > > > events, not alert") which breaks your patch.  The reason
> > > > > > for that is that lis3lv02d relies on the i2c client's IRQ
> > > > > > being 0 to detect that it should not create /dev/freefall.
> > > > > >  Benjamin's patch causes the Host Notify IRQ to be
> > > > > > assigned to the i2c client your patch creates, thus
> > > > > > causing lis3lv02d to create /dev/freefall, which in turn
> > > > > > conflicts with dell-smo8800 which is trying to create
> > > > > > /dev/freefall itself.
> > > > > 
> > > > > So 4d5538f5882a is breaking lis3lv02d driver...
> > > > 
> > > > Apologies for that.
> > > > 
> > > > I could easily fix this by adding a kernel API to know whether
> > > > the provided irq is from Host Notify or if it was coming from
> > > > an actual declaration. However, I have no idea how many other
> > > > drivers would require this (hopefully only this one).
> > > > 
> > > > One other solution would be to reserve the Host Notify IRQ and
> > > > let the actual drivers that need it to set it, but this was
> > > > not the best solution according to Dmitri. On my side, I am
> > > > not entirely against this given that it's a chip feature, so
> > > > the driver should be able to know that it's available.
> > > > 
> > > > Dmitri, Wolfram, Jean, any preferences?
> > > 
> > > I read this:
> > > 
> > > "IIRC both dell-smo8800 and lis3lv02d represent one HW device
> > > (that ST microelectronics accelerometer) but due to complicated
> > > HW abstraction and layers on Dell laptops it is handled by two
> > > drivers, one ACPI and one i2c."
> > > 
> > > and that is the core of the issue. You have 2 drivers fighting
> > > over the same device. Fix this and it will all work.
> > 
> > With my current implementation (which I sent in this patch), they
> > are not fighting.
> > 
> > dell-smo8800 exports /dev/freefall (and nothing more) and lis3lv02d
> > only accelerometer device as lis3lv02d driver does not get IRQ
> > number in platform data.
> > 
> > > As far as I can see hp_accel instantiates lis3lv02d and accesses
> > > it via ACPI methods, can the same be done for Dell?
> > 
> > No, Dell does not have any ACPI methods. And as I wrote in ACPI or
> > DMI is even not i2c address of device, so it needs to be specified
> > in code itself.
> > 
> > Really there is no other way... :-(
> 
> Sure there is:
> 
> 1. dell-smo8800 instantiates I2C device as "dell-smo8800-accel".
> 2. dell-smo8800 provides read/write functions for lis3lv02d that
> simply forward requests to dell-smo8800-accel i2c client.
> 3. dell-smo8800 instantiates lis3lv02d instance like hp_accel does.

Sorry, but I do not understand how you mean it... Why to provides new 
read/write i2c functions which are already implemented by i2c-i801 bus 
and lis3lv02d i2c driver?

> Alternatively, can lis3lv02d be tasked to create /dev/freefall?

If i2c_board_info contains IRQ then lis3lv02d create /dev/freefall 
device.

But... what is problem with current implementation? Accelerometer HW 
provides two functions:

1) 3 axes reports
2) Disk freefall detection

And 1) is handled by i2c driver lis3lv02d and 2) is by dell-smo8800. 
Both functions are independent here.

I think you just trying to complicate this situation even more to be 
more complicated as currently is.

> Yet another option: can we add a new flag to i2c_board_info
> controlling whether we want to enable/disable wiring up host notify
> interrupt? Benjamin, is there anything "special" in RMI SMbus ACPI
> descriptors we could use?
> 
> Thanks.

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2017-01-03 20:06 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-27 12:52 [PATCH] i2c: i801: Register optional lis3lv02d i2c device on Dell machines Pali Rohár
2016-12-27 13:43 ` Wolfram Sang
2016-12-27 13:51   ` Pali Rohár
2016-12-27 22:15     ` Andy Shevchenko
2016-12-27 22:41       ` Valdis.Kletnieks
2016-12-28  7:55         ` Andy Shevchenko
2016-12-28  9:05           ` Pali Rohár
2016-12-28 14:03             ` Wolfram Sang
2016-12-29  4:37               ` Valdis.Kletnieks
2016-12-28  8:38       ` Pali Rohár
2016-12-28 14:02     ` Wolfram Sang
2017-01-04  9:45       ` Jean Delvare
2016-12-29  8:29 ` Michał Kępień
2016-12-29  9:00   ` Pali Rohár
2016-12-29 13:47     ` Michał Kępień
2016-12-29 14:17       ` Pali Rohár
2016-12-29 21:09         ` Michał Kępień
2016-12-29 21:28           ` Pali Rohár
2017-01-03  9:06             ` Benjamin Tissoires
2017-01-03  9:23               ` Pali Rohár
2017-01-03 18:38               ` Dmitry Torokhov
2017-01-03 18:50                 ` Pali Rohár
2017-01-03 18:58                   ` Mario.Limonciello
2017-01-03 19:48                   ` Dmitry Torokhov
2017-01-03 20:05                     ` Pali Rohár [this message]
2017-01-03 20:24                       ` Dmitry Torokhov
2017-01-03 20:39                         ` Pali Rohár
2017-01-03 20:59                           ` Dmitry Torokhov
2017-01-04  8:18                             ` Pali Rohár
2017-01-04  9:05                               ` Benjamin Tissoires
2017-01-04  9:18                                 ` Pali Rohár
2017-01-04 10:13                                   ` Benjamin Tissoires
2017-01-04 10:21                                     ` Pali Rohár
2017-01-04 10:32                                       ` Benjamin Tissoires
2017-01-04 11:22                                         ` Pali Rohár
2017-01-04 12:00                                           ` Pali Rohár
2017-01-04 13:02                                             ` Benjamin Tissoires
2017-01-04 16:06                                               ` Pali Rohár
2017-01-04 17:39                                                 ` Benjamin Tissoires
2017-01-04 17:46                                                   ` Wolfram Sang
2017-01-04 17:54                                                     ` Dmitry Torokhov
2017-01-04 21:49                                                       ` Benjamin Tissoires
2017-01-04 21:55                                                         ` Dmitry Torokhov
2017-01-04 21:55                                                       ` Wolfram Sang
2017-01-04 22:00                                                         ` Dmitry Torokhov
2017-01-04 22:03                                                           ` Dmitry Torokhov
2017-01-05  2:20                                                       ` [PATCH] i2c: do not enable fall back to Host Notify by default kbuild test robot
2017-01-05  2:21                                                       ` kbuild test robot
2017-01-05  8:54                                                       ` [PATCH] i2c: i801: Register optional lis3lv02d i2c device on Dell machines Pali Rohár
2017-01-05  9:26                                                         ` Benjamin Tissoires
2017-01-04 18:50                             ` Jean Delvare
2017-01-04  9:53                           ` Andy Shevchenko
2017-01-04 10:25                             ` Benjamin Tissoires
2017-01-04 11:35                               ` Pali Rohár
2017-01-04 12:33                                 ` Benjamin Tissoires
2017-01-03 21:29                     ` Benjamin Tissoires
2017-01-04  6:36                       ` Dmitry Torokhov
2017-01-04  9:13                         ` Benjamin Tissoires
2017-01-04  9:25                           ` Pali Rohár
2017-01-03 20:20                   ` Andy Shevchenko
2017-01-04 10:18               ` Jean Delvare
2017-01-07 12:49         ` Wolfram Sang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201701032105.51144@pali \
    --to=pali.rohar@gmail.com \
    --cc=Mario_Limonciello@dell.com \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=alex.hung@canonical.com \
    --cc=benjamin.tissoires@redhat.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=gabriele.mzt@gmail.com \
    --cc=jdelvare@suse.com \
    --cc=jochen@penguin-breeder.org \
    --cc=kernel@kempniu.pl \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=stevenhoneyman@gmail.com \
    --cc=tiwai@suse.de \
    --cc=wsa@the-dreams.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).