[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <29629.64539.qm@web29014.mail.ird.yahoo.com>
Date: Fri, 24 Jun 2011 22:32:01 +0100 (BST)
From: Paul Parsons <lost.distance@...oo.com>
To: Jean-François Dagenais <dagenaisj@...atest.com>
Cc: linux-kernel@...r.kernel.org, johnpol@....mipt.ru
Subject: Re: w1/ds1wm regression after 2.6.39: "bus error, retrying"
Here's the debug output from ds1wm_search():
ds1wm ds1wm: search begin
ds1wm ds1wm: pass: 1 r : 0x0000000000000000 writing SEARCH_ROM
ds1wm ds1wm: pass: 1 entering ASM
ds1wm ds1wm: pass: 1 begining nibble loop
ds1wm ds1wm: pass: 1 r': 0xd300001085da8430 d:0x0000000000000000
ds1wm ds1wm: pass: 1 nibble loop complete, exiting ASM
ds1wm ds1wm: pass: 1 resetting bus
ds1wm ds1wm: pass: 1 found 0xd300001085da8430
ds1wm ds1wm: pass: 1 complete, preparing next pass
ds1wm ds1wm: pass: 1 new d:0x0000000000000000 MS discrep bit:-1
ds1wm ds1wm: pass: 1 total: 1 search done ms d bit pos: -1
The hx4700 does indeed have a ds2760 connected to the ds1wm. I believe the ds1wm is integrated into the HTC ASIC3, but my knowledge of the hardware is almost zero.
Regards,
Paul
--- On Fri, 24/6/11, Jean-François Dagenais <dagenaisj@...atest.com> wrote:
> The sleep I removed there only delays the time between the
> reset pulse and the function exiting, it doesn't populate
> the "slave_present" variable with a different value. The
> reset pulse and the wait that the ds1wm implements (by
> raising an interrupt at the end of it all) is spec'ed on the
> 1-wire specification, and the DS1WM_TIMEOUT is a really long
> time. So there should be plenty of time for the slaves to
> acknowledge the reset and participate in further
> communications.
>
> So here's my hunch. We observed this here on our circuit
> too. It is possible that the pull-up resistor on your
> circuit is too resistive which would make the slave device
> fail to properly come back to life after the reset pulse
> (bus shorted to the ground) when the drain opens, and hence
> not able to cope well with the search that follows. The 1ms
> wait basically gives the slave(s) time to charge up again
> (with the drain open, the voltage is high).
>
> The weird thing is that the ds1wm_reset function returns 0,
> since the while loop executes more than once, so it did find
> a slave (slave_present obtained from the PDR status bit), so
> the slave is kinda there... But the search fails somehow
> after that. Maybe there is something in your slave's spec
> sheet that could help, although the ds1wm reset timings. So
> I still think the debug trace and knowing if you have only
> one slave on the bus would help me figure this out. New
> question: what slave(s)? is it the DS2760?
>
> PS: there are also controls in the DS1WM_CNTRL register
> that has to do with strong-pull-ups which are just not used
> by the driver yet. refer to: http://datasheets.maxim-ic.com/en/ds/DS1WM.pdf
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists