2008-10-27 18:31:43

by Matt Witherspoon

[permalink] [raw]
Subject: Re: Problems & crash with Bluecore6 and SDIO driver

Quoting David Vrabel <[email protected]>:
> Deep sleep control is done on a per-function basis so you need to write
> 0x11 to disable deep sleep on function 1 (the bluetooth function).

Thanks for the response, David.

Applying Tomas' patch does indeed fix the crash.
I put a sdio_f0_writeb(data->func, 0x11, 0xf0, NULL); in btsdio_open(). This
register write does seem to have some effect. Without it, idle current was
0.6mA. With the write, idle current is around 2.5mA. However, the BC6 still
will not respond to commands after being idle for several seconds. Or, it will
respond but with bogus data (like a features bitfield of all 0x00s).

Then, I realized that if I run this command:
hciconfig hci0 up ; bccmd psset -s psram -r 0x0229 0
along with the register write, everything works great. I appear to have to do
both: the register write and the PSKEY setting. One or the other alone is not
sufficient.

Does this seem correct to you? I can't see how btsdio could work on a BC6
without following this process, unless I have a old bad firmware or something.

Thanks -Matt


2008-10-27 19:40:52

by Marcel Holtmann

[permalink] [raw]
Subject: Re: Problems & crash with Bluecore6 and SDIO driver

Hi Mark,

> > Deep sleep control is done on a per-function basis so you need to write
> > 0x11 to disable deep sleep on function 1 (the bluetooth function).
>
> Thanks for the response, David.
>
> Applying Tomas' patch does indeed fix the crash.
> I put a sdio_f0_writeb(data->func, 0x11, 0xf0, NULL); in btsdio_open(). This
> register write does seem to have some effect. Without it, idle current was
> 0.6mA. With the write, idle current is around 2.5mA. However, the BC6 still
> will not respond to commands after being idle for several seconds. Or, it will
> respond but with bogus data (like a features bitfield of all 0x00s).
>
> Then, I realized that if I run this command:
> hciconfig hci0 up ; bccmd psset -s psram -r 0x0229 0
> along with the register write, everything works great. I appear to have to do
> both: the register write and the PSKEY setting. One or the other alone is not
> sufficient.

the 0x0229 translates to PSKEY_DEEP_SLEEP_STATE if anybody wonders. So
for a full support of the BlueCore6 SDIO interface we would have to do a
little bit more work. I stopped looking into it since the only BlueCore6
that I have is an engineering release and I haven't checked it for a
while. Never got updated hardware. Hint hint ;)

> Does this seem correct to you? I can't see how btsdio could work on a BC6
> without following this process, unless I have a old bad firmware or something.

At the last BlueZ developer meeting, we discussed an init stage for all
Bluetooth drivers. The init stage then can be used to init hardware with
hardware specific details like PS settings or firmware download.

Regards

Marcel