All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Pali Rohár" <pali.rohar@gmail.com>
To: "H. Nikolaus Schaller" <hns@goldelico.com>
Cc: Sebastian Reichel <sre@kernel.org>,
	Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>,
	linux-pm@vger.kernel.org
Subject: Re: [PATCH 4/4] w1:slaves:bq27000: load battery driver kernel module if required
Date: Thu, 8 Oct 2015 09:54:22 +0200	[thread overview]
Message-ID: <20151008075422.GC27737@pali> (raw)
In-Reply-To: <7F953A3F-D9F5-4BA0-A7B5-0CF8AAB5C937@goldelico.com>

On Thursday 08 October 2015 09:26:26 H. Nikolaus Schaller wrote:
> 
> Am 08.10.2015 um 00:26 schrieb Pali Rohár <pali.rohar@gmail.com>:
> 
> > On Wednesday 07 October 2015 20:42:39 H. Nikolaus Schaller wrote:
> >> Explicitly call request_module() in the wrapper so that the
> >> bq27x00_battery driver is loded on demand, when compiled as module.
> >> 
> >> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
> >> ---
> >> drivers/w1/slaves/w1_bq27000.c | 2 ++
> >> 1 file changed, 2 insertions(+)
> >> 
> >> diff --git a/drivers/w1/slaves/w1_bq27000.c
> >> b/drivers/w1/slaves/w1_bq27000.c index caafb17..745bd6e 100644
> >> --- a/drivers/w1/slaves/w1_bq27000.c
> >> +++ b/drivers/w1/slaves/w1_bq27000.c
> >> @@ -49,6 +49,8 @@ static int w1_bq27000_add_slave(struct w1_slave
> >> *sl) int ret;
> >> 	struct platform_device *pdev;
> >> 
> >> +	request_module("bq27x00_battery");  /* load as module if needed */
> >> +
> >> 	pdev = platform_device_alloc("bq27000-battery", -1);
> >> 	if (!pdev) {
> >> 		ret = -ENOMEM;
> > 
> > Hi! Function platform_device_alloc would allocate kernel device and it 
> > should also load appropriate kernel driver (via platform:bq27000-battery 
> > alias). If that does not work, problem is somewhere else. Maybe depmod 
> > is not properly generated? Or bq27x00_batter.ko modules does not contain 
> > needed alias?
> 

At least driver is renaming in upstream kernel, so hardcoding driver
name is wrong approach. It will be broken... If we show that
request_module is really needed (but I believe not!) then please use
alias instead.

> alias exists:
> 
> #ifdef CONFIG_BATTERY_BQ27X00_PLATFORM
> MODULE_ALIAS("platform:bq27000-battery");
> #endif
> 
> depmod entry exist:
> 
> root@letux:~# modprobe -c | fgrep bq27
> alias i2c:bq27000_battery bq27x00_battery
> alias i2c:bq27200 bq27x00_battery
> alias i2c:bq27425 bq27x00_battery
> alias i2c:bq27500 bq27x00_battery
> alias i2c:bq27510 bq27x00_battery
> alias i2c:bq27742 bq27x00_battery
> alias platform:bq27000_battery bq27x00_battery
> alias w1_family_0x01 w1_bq27000
> 
> And I have traced all calls to call_modprobe
> 
> [    9.969085] call_modprobe w1-family-0x01
> [   10.189727] call_modprobe bq27x00_battery
> [   29.879333] call_modprobe net-pf-10
> [   30.530548] call_modprobe netdev-eth0
> [   30.548156] call_modprobe eth0
> [   30.565063] call_modprobe netdev-eth0
> [   30.581420] call_modprobe eth0
> [   31.301300] call_modprobe netdev-eth1
> [   31.316101] call_modprobe eth1
> [   32.008270] call_modprobe usbfunc:ecm
> [   35.554748] call_modprobe net-pf-16-proto-9
> [   36.243164] call_modprobe net-pf-31
> [   36.614410] call_modprobe bt-proto-4
> [   73.888122] call_modprobe net-pf-16-proto-9
> [   73.921112] call_modprobe net-pf-16-proto-9
> [   77.153625] call_modprobe net-pf-16-proto-9
> [   77.188262] call_modprobe net-pf-16-proto-9
> [   77.342895] call_modprobe net-pf-16-proto-9
> [   77.389129] call_modprobe net-pf-16-proto-9
> [   77.419006] call_modprobe net-pf-16-proto-9
> 
> And there is only the line I have added. I.e. I can't find an automatic attempt
> to load the platform:bq27000-battery. It also doesn't help to change to 
> platform_device_alloc("bq27000_battery", -1)
> 
> So I think platform_device_alloc() does only what it tells: it allocates a device
> but does *not* try to load a kernel module. It only binds to a driver compiled
> into the kernel. AFAIR the I2C bus driver also calls request_module() at some
> stage after finding a client (i2c:bq27000_battery).
> 

Try to call platform_device_register(). E.g for rx51-battery power
supply device it is working fine. Device itself is allocated and
registered in arch/arm/mach-omap2/board-rx51-peripherals.c and driver is
in drivers/power/rx51_battery.c. You can also try to reuse that code...
I see that w1 is quite different.

> > Adding request_module() here is not proper solution. Real problem is 
> > somewhere else... Anyway there is series of patches for bq27x00_battery 
> > which should cleanup some problems, so maybe they also fix your problem.
> 
> Is there a tree where I can pull the patches to cross-check if they change
> something?
> 

Sebastian? Where are those new bq27k patches now?

> BR,
> Nikolaus
> 

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

  reply	other threads:[~2015-10-08  7:54 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-07 18:42 [PATCH 0/4] Fix minor bq27x00 displeasures H. Nikolaus Schaller
2015-10-07 18:42 ` [PATCH 1/4] restore bq27000 code of v4.3-rc4 H. Nikolaus Schaller
2015-10-07 18:43   ` H. Nikolaus Schaller
2015-10-07 18:42 ` [PATCH 2/4] restore w1 slave " H. Nikolaus Schaller
2015-10-07 18:44   ` H. Nikolaus Schaller
2015-10-07 18:42 ` [PATCH 3/4] power:bq27x00: don't fill system log by missing battery H. Nikolaus Schaller
2015-10-07 22:23   ` Pali Rohár
2015-10-07 22:50     ` Neil Brown
2015-12-05  0:38       ` Sebastian Reichel
2015-10-07 18:42 ` [PATCH 4/4] w1:slaves:bq27000: load battery driver kernel module if required H. Nikolaus Schaller
2015-10-07 22:26   ` Pali Rohár
2015-10-08  7:26     ` H. Nikolaus Schaller
2015-10-08  7:54       ` Pali Rohár [this message]
2015-10-08  9:58         ` H. Nikolaus Schaller
2015-10-07 18:45 ` [PATCH 0/4] Fix minor bq27x00 displeasures H. Nikolaus Schaller

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=20151008075422.GC27737@pali \
    --to=pali.rohar@gmail.com \
    --cc=dbaryshkov@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=hns@goldelico.com \
    --cc=linux-pm@vger.kernel.org \
    --cc=sre@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.