From: "Andrew de Quincey" <[EMAIL PROTECTED]> > I'm transmitting the data in 64 byte chunks to the chip. Problem is > the data rate turns out to be roughly 320 bytes/sec! So a full upload > takes 95 SECONDS to complete.
I'd say the i2c routines are just poorly written, or rather, the hardware was not fully understood. Look at this comment in the source: /* reason: while fiddling around with the i2c-routines, I noticed that after writing out an i2c-command, one may not read out the status immediately after that. you *must* wait some time, before even the busy-flag gets set */ I, too, noticed that the PSR does not immediately reflect the I2C busy status, but the fix is *FAR* simpler than that: Simply read the PSR *once* and *junk* the result. Reading it a *second* time always resulted in the proper I2C busy status for me. But take a look what the i2c_busy_rise_and_fall() function does instead: It reads the PSR *once* and if the "I2C busy" bit is not set (which it never is upon the first read!) it does: /* see if anything can be done while we're waiting */ SAA7146_RESCHED; mdelay(1); Not surprising that the performance is poor... > Does anyone have any suggestions? Yes, rewrite the SAA7146A I2C functions from scratch :) Alternatively, try putting just an extra read of the PSR into the i2c_busy_rise_and_fall() function before the loops, that might work wonders already. Regards, -- Robert Schlabbach e-mail: [EMAIL PROTECTED] Berlin, Germany -- Info: To unsubscribe send a mail to [EMAIL PROTECTED] with "unsubscribe linux-dvb" as subject.
