From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Ujfalusi Subject: Re: TWL6040 fails to initialize Date: Thu, 27 Feb 2014 14:05:01 +0200 Message-ID: <530F29ED.9020706@ti.com> References: <530C70B3.4010103@epfl.ch> <530CA8DA.8050806@ti.com> <530CB9C6.60806@epfl.ch> <530D972F.805@ti.com> <530DB97E.80309@epfl.ch> <530DC1D3.8040800@ti.com> <530DC291.2060708@epfl.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <530DC291.2060708@epfl.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: florian.vaussard@epfl.ch Cc: =?UTF-8?B?UGhpbGlwcGUgUsOpdG9ybmF6?= , linux-omap , linux-arm List-Id: linux-omap@vger.kernel.org T24gMDIvMjYvMjAxNCAxMjozMSBQTSwgRmxvcmlhbiBWYXVzc2FyZCB3cm90ZToKPj4+IEkgc3Rh dGlzdGljYWxseSBjaGVja2VkIHRoYXQgdGhlIHNsZWVwIHNob3VsZCBiZSBwbGFjZWQgYWZ0ZXIg dGhlIEdQSU8KPj4+IHJlcXVlc3QsIHNvIGluZGVlZCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBwcm9i bGVtLCBhbmQgeW91ciBleHBsYW5hdGlvbiBpcwo+Pj4gcGxhdXNpYmxlLiBDYW4geW91IHNlbmQg YSBwcm9wZXIgcGF0Y2g/Cj4+Pgo+Pj4gTm93LCByZWxhdGVkIHRvIHRoaXMsIEkgbWFuYWdlZCB0 byBmb3VuZCBhIHBhcnQgb2YgdGhlIGRhdGFzaGVldCBvbiB0aGUKPj4+IEdyZWF0IEludGVybmV0 LiBMb29raW5nIGF0IHRoZSAiUG93ZXItVXAgU2VxdWVuY2UiIHNlY3Rpb24sIGl0IGlzIHdyaXR0 ZW46Cj4+Pgo+Pj4gLSBOUkVTUFdST04gZ29lcyBoaWdoIC0+IHBsdWcgZGV0ZWN0IGFuZCBHUE8g YXJlIGF2YWlsYWJsZQo+Pj4gLSBWMlYxIGdvZXMgaGlnaCAtPiBob29rLWRldGVjdCBhdmFpbGFi bGUgYnkgSTJDIHByb2dyYW1taW5nIChzbGVlcCBtb2RlKQo+Pj4gLSBBVURQV1JPTiBnb2VzIGhp Z2ggJiYgUkVBRFlJTlQgLT4gcmVhZHkgdG8gY29tbXVuaWNhdGUgdGhyb3VnaCBJMkMgYW5kIFBE TQo+Pj4KPj4+IFNvLCBhbHRob3VnaCB0aGVyZSBzZWVtcyB0byBiZSBzb21lIGNvbnRyYWRpY3Rp b25zIG9uIHdoZW4gaXQgaXMKPj4+IHBvc3NpYmxlIHRvIGFjY2VzcyB0aGUgSTJDLCBzaG91bGRu J3Qgd2UgZW5hYmxlIHRoZSBBVURQV1JPTiBHUElPCj4+PiBfYmVmb3JlXyBtYWtpbmcgYW55IEky QyBhY2Nlc3M/Cj4+Pgo+Pj4gRm9yIHRoZSB0d2w2MDQwX3Byb2JlLCB0aGUgZm9sbG93aW5nIHBh dGggd291bGQgc2VlbSBtb3JlIGNvcnJlY3QgdG8gbWU6Cj4+Pgo+Pj4gMSkgZW5hYmxlIHJlZ3Vs YXRvcnMKPj4+IDIpIHJlcXVlc3QgQVVEUFdST04KPj4+IDMpIHR3bDYwNDBfcG93ZXIoT04pICYm IHJlZ2NhY2hlX2NhY2hlX29ubHkoZmFsc2UpCj4+PiA0KSB3YWl0IGZvciBSRUFEWUlOVCAob3Ig c2xlZXAgaWYgZGV0ZXJtaW5pc3RpYykKPj4+IDUpIHBlcmZvcm0gYWxsIHJlcXVpcmVkIEkyQyBh Y2Nlc3NlcyAocmVhZCByZXZpc2lvbiwgZXRjLikKPj4+IDYpIHR3bDYwNDBfcG93ZXIoT0ZGKSAm JiByZWdjYWNoZV9jYWNoZV9vbmx5KHRydWUpCj4+Pgo+Pj4gV2hhdCBkbyB5b3UgdGhpbms/Cj4+ Cj4+IEV2ZW4gd2hlbiB0aGUgQVVEUFdST04gc2lnbmFsIGlzIGxvdyB3ZSBjYW4gYWNjZXNzIHRv IHJlZ2lzdGVycyBpbiBWSU8gZG9tYWluLAo+PiBwbHVnIGRldGVjdCBhbmQgR1BPIGZ1bmN0aW9u cy4gU28gdGhlcmUncyBubyBuZWVkIHRvIHBvd2VyIG9uIHRoZSBjb2RlYyBqdXN0Cj4+IHRvIHBv d2VyIGl0IGRvd24gbGF0ZXIuCj4+Cj4gCj4gT2ssIGlmIGl0IGlzIHNhZmUgdG8gZG8gc28sIEkg YW0gZmluZSB3aXRoIHRoZSBjdXJyZW50IHByb2JlLiBJIGxldCB5b3UKPiBwb3N0IGEgcGF0Y2gg dG8gYWRkIGEgZGVsYXkgYWZ0ZXIgcmVxdWVzdGluZyB0aGUgR1BJTy4KCgpUaGVyZSdzIHNvbWV0 aGluZyBlbHNlIGdvaW5nIG9uIG9uIHlvdXIgYm9hcmQuCkkgZGlkIHNvbWUgZXhwZXJpbWVudHMg b24gUGFuZGFCb2FyZHM6IGluIHUtYm9vdCBJIHNldCB0aGUgR1BJTzEyNyAoYXVkcHdyb24pCmhp Z2ggYW5kIGJvb3QgdGhlIGtlcm5lbC4KRHVyaW5nIHRoZSBib290IEkgc2VlIGFsbCBzb3J0cyBv ZiBlcnJvcnMsIG1jcGRtIGZhaWxzIHRvIHJlc2V0LCBpMmMgdGltZW91dHMKdG93YXJkcyB0d2w2 MDQwLgpGb3IgdGhpcyB0aGUgc29sdXRpb24gaXMgdG8gcmVhZCB0aGUgSU5USUQgcmVnaXN0ZXIg anVzdCBhZnRlciBJIHJlcXVlc3QgdGhlCmdwaW8gLSB0byBjbGVhciBhbnkgbm8gbG9uZ2VyIHZh bGlkIGludGVycnVwdHMgYmVmb3JlIHdlIHJlcXVlc3QgdGhlIElSUS4gVGhpcwp3b3JrcyBmaW5l IG9uIG15IGJvYXJkcy4KClRoZSBpc3N1ZSB5b3UgaGF2ZSB3aXRoIHlvdXIgYm9hcmQgaXMgc29t ZXRoaW5nIHRvdGFsbHkgZGlmZmVyZW50LgpPbmUgdGhpbmcgbWlnaHQgYmUgdGhhdCB0aGUgaTJj IGJ1cyBpcyBzZXQgdG8gNDAwS0h6IHdoaWxlIHRoZSB0d2w2MDQwIGJ5CmRlZmF1bHQgaXMgc2V0 IGZvciBub3JtYWwgbW9kZSAoMTAwS0h6KS4gT24gYWxsIG9mIHRoZSBib2FyZHMgSSBoYXZlIGFj Y2Vzcwp0aGlzIHdvcmtzIGZpbmUgYnV0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgZWxlY3RyaWNhbCBp c3N1ZSBvbiB5b3VyIGJvYXJkIHdoaWNoCmNhdXNlcyBpMmMgdG8gZmFpbC4KClRoZXJlJ3MgYWxz byBhbm90aGVyIHRoaW5nIEkganVzdCBub3RpY2VkOiB0aGUgcmVnbWFwIHBhdGNoCnJlZ21hcF9y ZWdpc3Rlcl9wYXRjaCgpIHdoZW4gaXQgaXMgYXBwbGllZCB3aWxsIG5vdCB1cGRhdGUgdGhlIHJl Z2NhY2hlIGJ5CmRlc2lnbi4gSSBkbyBub3QgbGlrZSB0aGF0IHRvbyBtdWNoLiBPbiB0aGUgb3Ro ZXIgaGFuZCBpdCBpcyBoYW5keSB0byBzZXQgdGhlCkFDQ0NUTCByZWdpc3RlciBhcyBlYXJseSBh cyBwb3NzaWJsZS4KClNvLCBJJ20gbm90IHN1cmUgYWJvdXQgdGhlIGRlbGF5IGFuZCB3aHkgaXQg aGVscHMgb24geW91ciBib2FyZC4KCi0tIApQw6l0ZXIKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: peter.ujfalusi@ti.com (Peter Ujfalusi) Date: Thu, 27 Feb 2014 14:05:01 +0200 Subject: TWL6040 fails to initialize In-Reply-To: <530DC291.2060708@epfl.ch> References: <530C70B3.4010103@epfl.ch> <530CA8DA.8050806@ti.com> <530CB9C6.60806@epfl.ch> <530D972F.805@ti.com> <530DB97E.80309@epfl.ch> <530DC1D3.8040800@ti.com> <530DC291.2060708@epfl.ch> Message-ID: <530F29ED.9020706@ti.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 02/26/2014 12:31 PM, Florian Vaussard wrote: >>> I statistically checked that the sleep should be placed after the GPIO >>> request, so indeed this seems to be the problem, and your explanation is >>> plausible. Can you send a proper patch? >>> >>> Now, related to this, I managed to found a part of the datasheet on the >>> Great Internet. Looking at the "Power-Up Sequence" section, it is written: >>> >>> - NRESPWRON goes high -> plug detect and GPO are available >>> - V2V1 goes high -> hook-detect available by I2C programming (sleep mode) >>> - AUDPWRON goes high && READYINT -> ready to communicate through I2C and PDM >>> >>> So, although there seems to be some contradictions on when it is >>> possible to access the I2C, shouldn't we enable the AUDPWRON GPIO >>> _before_ making any I2C access? >>> >>> For the twl6040_probe, the following path would seem more correct to me: >>> >>> 1) enable regulators >>> 2) request AUDPWRON >>> 3) twl6040_power(ON) && regcache_cache_only(false) >>> 4) wait for READYINT (or sleep if deterministic) >>> 5) perform all required I2C accesses (read revision, etc.) >>> 6) twl6040_power(OFF) && regcache_cache_only(true) >>> >>> What do you think? >> >> Even when the AUDPWRON signal is low we can access to registers in VIO domain, >> plug detect and GPO functions. So there's no need to power on the codec just >> to power it down later. >> > > Ok, if it is safe to do so, I am fine with the current probe. I let you > post a patch to add a delay after requesting the GPIO. There's something else going on on your board. I did some experiments on PandaBoards: in u-boot I set the GPIO127 (audpwron) high and boot the kernel. During the boot I see all sorts of errors, mcpdm fails to reset, i2c timeouts towards twl6040. For this the solution is to read the INTID register just after I request the gpio - to clear any no longer valid interrupts before we request the IRQ. This works fine on my boards. The issue you have with your board is something totally different. One thing might be that the i2c bus is set to 400KHz while the twl6040 by default is set for normal mode (100KHz). On all of the boards I have access this works fine but there might be some electrical issue on your board which causes i2c to fail. There's also another thing I just noticed: the regmap patch regmap_register_patch() when it is applied will not update the regcache by design. I do not like that too much. On the other hand it is handy to set the ACCCTL register as early as possible. So, I'm not sure about the delay and why it helps on your board. -- P?ter