linux-pm.vger.kernel.org archive mirror
 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 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).