summaryrefslogtreecommitdiff
path: root/firmware/target/arm/i2c-pp.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2007-10-16 01:25:17 +0000
committerMichael Sevakis <jethead71@rockbox.org>2007-10-16 01:25:17 +0000
commita9b2fb5ee3114fe835f6515b6aeae7454f66d821 (patch)
treefc4e96d0c1f215565918406c8827b16b806c1345 /firmware/target/arm/i2c-pp.c
parenta3fbbc9fa7e12fd3fce122bbd235dc362050e024 (diff)
downloadrockbox-a9b2fb5ee3114fe835f6515b6aeae7454f66d821.tar.gz
rockbox-a9b2fb5ee3114fe835f6515b6aeae7454f66d821.zip
Finally full multicore support for PortalPlayer 502x targets with an eye towards the possibility of other types. All SVN targets the low-lag code to speed up blocking operations. Most files are modified here simple due to a name change to actually support a real event object and a param change to create_thread. Add some use of new features but just sit on things for a bit and leave full integration for later. Work will continue on to address size on sensitive targets and simplify things if possible. Any PP target having problems with SWP can easily be changed to sw corelocks with one #define change in config.h though only PP5020 has shown an issue and seems to work without any difficulties.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15134 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/i2c-pp.c')
-rw-r--r--firmware/target/arm/i2c-pp.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/firmware/target/arm/i2c-pp.c b/firmware/target/arm/i2c-pp.c
index 1cc25a1a10..e5813f9f9a 100644
--- a/firmware/target/arm/i2c-pp.c
+++ b/firmware/target/arm/i2c-pp.c
@@ -132,18 +132,18 @@ static int pp_i2c_send_byte(unsigned int addr, int data0)
132} 132}
133 133
134/* Public functions */ 134/* Public functions */
135static struct mutex i2c_mutex; 135struct spinlock i2c_spin NOCACHEBSS_ATTR;
136 136
137int i2c_readbytes(unsigned int dev_addr, int addr, int len, unsigned char *data) { 137int i2c_readbytes(unsigned int dev_addr, int addr, int len, unsigned char *data) {
138 unsigned int temp; 138 unsigned int temp;
139 int i; 139 int i;
140 spinlock_lock(&i2c_mutex); 140 spinlock_lock(&i2c_spin);
141 pp_i2c_send_byte(dev_addr, addr); 141 pp_i2c_send_byte(dev_addr, addr);
142 for (i = 0; i < len; i++) { 142 for (i = 0; i < len; i++) {
143 pp_i2c_read_byte(dev_addr, &temp); 143 pp_i2c_read_byte(dev_addr, &temp);
144 data[i] = temp; 144 data[i] = temp;
145 } 145 }
146 spinlock_unlock(&i2c_mutex); 146 spinlock_unlock(&i2c_spin);
147 return i; 147 return i;
148} 148}
149 149
@@ -151,10 +151,10 @@ int i2c_readbyte(unsigned int dev_addr, int addr)
151{ 151{
152 int data; 152 int data;
153 153
154 spinlock_lock(&i2c_mutex); 154 spinlock_lock(&i2c_spin);
155 pp_i2c_send_byte(dev_addr, addr); 155 pp_i2c_send_byte(dev_addr, addr);
156 pp_i2c_read_byte(dev_addr, &data); 156 pp_i2c_read_byte(dev_addr, &data);
157 spinlock_unlock(&i2c_mutex); 157 spinlock_unlock(&i2c_spin);
158 158
159 return data; 159 return data;
160} 160}
@@ -167,9 +167,9 @@ int pp_i2c_send(unsigned int addr, int data0, int data1)
167 data[0] = data0; 167 data[0] = data0;
168 data[1] = data1; 168 data[1] = data1;
169 169
170 spinlock_lock(&i2c_mutex); 170 spinlock_lock(&i2c_spin);
171 retval = pp_i2c_send_bytes(addr, 2, data); 171 retval = pp_i2c_send_bytes(addr, 2, data);
172 spinlock_unlock(&i2c_mutex); 172 spinlock_unlock(&i2c_spin);
173 173
174 return retval; 174 return retval;
175} 175}
@@ -221,7 +221,7 @@ void i2c_init(void)
221#endif 221#endif
222#endif 222#endif
223 223
224 spinlock_init(&i2c_mutex); 224 spinlock_init(&i2c_spin IF_COP(, SPINLOCK_TASK_SWITCH));
225 225
226 i2c_readbyte(0x8, 0); 226 i2c_readbyte(0x8, 0);
227} 227}