summaryrefslogtreecommitdiff
path: root/firmware/target/arm/i2c-pp.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/i2c-pp.c')
-rw-r--r--firmware/target/arm/i2c-pp.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/firmware/target/arm/i2c-pp.c b/firmware/target/arm/i2c-pp.c
index 175e2effd1..44713407df 100644
--- a/firmware/target/arm/i2c-pp.c
+++ b/firmware/target/arm/i2c-pp.c
@@ -196,6 +196,29 @@ int i2c_readbyte(unsigned int dev_addr, int addr)
196 return (int)data; 196 return (int)data;
197} 197}
198 198
199int i2c_sendbytes(unsigned int addr, int len, const unsigned char *data)
200{
201 int i, n;
202
203 mutex_lock(&i2c_mtx);
204
205 i = 0;
206 while (len > 0)
207 {
208 n = (len < 4) ? len : 4;
209
210 if (pp_i2c_send_bytes(addr, n, (unsigned char *)(data + i)) < 0)
211 break;
212
213 len -= n;
214 i += n;
215 }
216
217 mutex_unlock(&i2c_mtx);
218
219 return i;
220}
221
199int pp_i2c_send(unsigned int addr, int data0, int data1) 222int pp_i2c_send(unsigned int addr, int data0, int data1)
200{ 223{
201 int retval; 224 int retval;
@@ -234,7 +257,14 @@ void i2c_init(void)
234 257
235#if CONFIG_I2C == I2C_PP5020 258#if CONFIG_I2C == I2C_PP5020
236 outl(0x0, 0x600060a4); 259 outl(0x0, 0x600060a4);
260#if defined(PHILIPS_HDD1630)
261 outl(inl(0x600060a4) | 0x20, 0x600060a4);
262 outl(inl(0x7000c020) | 0x3, 0x7000c020);
263 outl(0x55, 0x7000c02c);
264 outl(0x54, 0x7000c030);
265#else
237 outl(0x80 | (0 << 8), 0x600060a4); 266 outl(0x80 | (0 << 8), 0x600060a4);
267#endif
238#elif CONFIG_I2C == I2C_PP5024 268#elif CONFIG_I2C == I2C_PP5024
239#if defined(SANSA_E200) || defined(PHILIPS_SA9200) 269#if defined(SANSA_E200) || defined(PHILIPS_SA9200)
240 /* Sansa OF sets this to 0x20 first, communicates with the AS3514 270 /* Sansa OF sets this to 0x20 first, communicates with the AS3514