diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2008-06-22 13:19:19 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-07-20 06:13:14 -0400 |
commit | a36ef6b1e09d06d4f1ac769eee4bd7e6cf3e0fae (patch) | |
tree | 099f489f485cbe8f44f3e8e3c8cb0e5b777d401d /drivers/media/common | |
parent | f51b10ef6520f2bd725dc333e771eabd55d6c04f (diff) |
V4L/DVB (8128): saa7146: ->cpu_addr and friends are little-endian
Annotations + stop saa7146_i2c from playing fast and loose with
reuse of ->cpu_addr for host-endian.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/common')
-rw-r--r-- | drivers/media/common/saa7146_core.c | 4 | ||||
-rw-r--r-- | drivers/media/common/saa7146_hlp.c | 2 | ||||
-rw-r--r-- | drivers/media/common/saa7146_i2c.c | 34 | ||||
-rw-r--r-- | drivers/media/common/saa7146_video.c | 4 |
4 files changed, 22 insertions, 22 deletions
diff --git a/drivers/media/common/saa7146_core.c b/drivers/media/common/saa7146_core.c index 89c7660b85d6..d01965e96927 100644 --- a/drivers/media/common/saa7146_core.c +++ b/drivers/media/common/saa7146_core.c | |||
@@ -233,7 +233,7 @@ void saa7146_pgtable_free(struct pci_dev *pci, struct saa7146_pgtable *pt) | |||
233 | 233 | ||
234 | int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt) | 234 | int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt) |
235 | { | 235 | { |
236 | u32 *cpu; | 236 | __le32 *cpu; |
237 | dma_addr_t dma_addr; | 237 | dma_addr_t dma_addr; |
238 | 238 | ||
239 | cpu = pci_alloc_consistent(pci, PAGE_SIZE, &dma_addr); | 239 | cpu = pci_alloc_consistent(pci, PAGE_SIZE, &dma_addr); |
@@ -250,7 +250,7 @@ int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt) | |||
250 | int saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, | 250 | int saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, |
251 | struct scatterlist *list, int sglen ) | 251 | struct scatterlist *list, int sglen ) |
252 | { | 252 | { |
253 | u32 *ptr, fill; | 253 | __le32 *ptr, fill; |
254 | int nr_pages = 0; | 254 | int nr_pages = 0; |
255 | int i,p; | 255 | int i,p; |
256 | 256 | ||
diff --git a/drivers/media/common/saa7146_hlp.c b/drivers/media/common/saa7146_hlp.c index 9c905399a233..05bde9ccb770 100644 --- a/drivers/media/common/saa7146_hlp.c +++ b/drivers/media/common/saa7146_hlp.c | |||
@@ -338,7 +338,7 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa | |||
338 | struct saa7146_video_dma *vdma2, u32* clip_format, u32* arbtr_ctrl, enum v4l2_field field) | 338 | struct saa7146_video_dma *vdma2, u32* clip_format, u32* arbtr_ctrl, enum v4l2_field field) |
339 | { | 339 | { |
340 | struct saa7146_vv *vv = dev->vv_data; | 340 | struct saa7146_vv *vv = dev->vv_data; |
341 | u32 *clipping = vv->d_clipping.cpu_addr; | 341 | __le32 *clipping = vv->d_clipping.cpu_addr; |
342 | 342 | ||
343 | int width = fh->ov.win.w.width; | 343 | int width = fh->ov.win.w.width; |
344 | int height = fh->ov.win.w.height; | 344 | int height = fh->ov.win.w.height; |
diff --git a/drivers/media/common/saa7146_i2c.c b/drivers/media/common/saa7146_i2c.c index 35b01ec40a51..c11da4d09cd0 100644 --- a/drivers/media/common/saa7146_i2c.c +++ b/drivers/media/common/saa7146_i2c.c | |||
@@ -24,7 +24,7 @@ static inline u32 saa7146_i2c_status(struct saa7146_dev *dev) | |||
24 | sent through the saa7146. have a look at the specifications p. 122 ff | 24 | sent through the saa7146. have a look at the specifications p. 122 ff |
25 | to understand this. it returns the number of u32s to send, or -1 | 25 | to understand this. it returns the number of u32s to send, or -1 |
26 | in case of an error. */ | 26 | in case of an error. */ |
27 | static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) | 27 | static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, __le32 *op) |
28 | { | 28 | { |
29 | int h1, h2; | 29 | int h1, h2; |
30 | int i, j, addr; | 30 | int i, j, addr; |
@@ -47,7 +47,7 @@ static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) | |||
47 | } | 47 | } |
48 | 48 | ||
49 | /* be careful: clear out the i2c-mem first */ | 49 | /* be careful: clear out the i2c-mem first */ |
50 | memset(op,0,sizeof(u32)*mem); | 50 | memset(op,0,sizeof(__le32)*mem); |
51 | 51 | ||
52 | /* loop through all messages */ | 52 | /* loop through all messages */ |
53 | for(i = 0; i < num; i++) { | 53 | for(i = 0; i < num; i++) { |
@@ -57,16 +57,16 @@ static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) | |||
57 | so we have to perform a translation */ | 57 | so we have to perform a translation */ |
58 | addr = (m[i].addr*2) + ( (0 != (m[i].flags & I2C_M_RD)) ? 1 : 0); | 58 | addr = (m[i].addr*2) + ( (0 != (m[i].flags & I2C_M_RD)) ? 1 : 0); |
59 | h1 = op_count/3; h2 = op_count%3; | 59 | h1 = op_count/3; h2 = op_count%3; |
60 | op[h1] |= ( (u8)addr << ((3-h2)*8)); | 60 | op[h1] |= cpu_to_le32( (u8)addr << ((3-h2)*8)); |
61 | op[h1] |= (SAA7146_I2C_START << ((3-h2)*2)); | 61 | op[h1] |= cpu_to_le32(SAA7146_I2C_START << ((3-h2)*2)); |
62 | op_count++; | 62 | op_count++; |
63 | 63 | ||
64 | /* loop through all bytes of message i */ | 64 | /* loop through all bytes of message i */ |
65 | for(j = 0; j < m[i].len; j++) { | 65 | for(j = 0; j < m[i].len; j++) { |
66 | /* insert the data bytes */ | 66 | /* insert the data bytes */ |
67 | h1 = op_count/3; h2 = op_count%3; | 67 | h1 = op_count/3; h2 = op_count%3; |
68 | op[h1] |= ( (u32)((u8)m[i].buf[j]) << ((3-h2)*8)); | 68 | op[h1] |= cpu_to_le32( (u32)((u8)m[i].buf[j]) << ((3-h2)*8)); |
69 | op[h1] |= ( SAA7146_I2C_CONT << ((3-h2)*2)); | 69 | op[h1] |= cpu_to_le32( SAA7146_I2C_CONT << ((3-h2)*2)); |
70 | op_count++; | 70 | op_count++; |
71 | } | 71 | } |
72 | 72 | ||
@@ -75,9 +75,9 @@ static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) | |||
75 | /* have a look at the last byte inserted: | 75 | /* have a look at the last byte inserted: |
76 | if it was: ...CONT change it to ...STOP */ | 76 | if it was: ...CONT change it to ...STOP */ |
77 | h1 = (op_count-1)/3; h2 = (op_count-1)%3; | 77 | h1 = (op_count-1)/3; h2 = (op_count-1)%3; |
78 | if ( SAA7146_I2C_CONT == (0x3 & (op[h1] >> ((3-h2)*2))) ) { | 78 | if ( SAA7146_I2C_CONT == (0x3 & (le32_to_cpu(op[h1]) >> ((3-h2)*2))) ) { |
79 | op[h1] &= ~(0x2 << ((3-h2)*2)); | 79 | op[h1] &= ~cpu_to_le32(0x2 << ((3-h2)*2)); |
80 | op[h1] |= (SAA7146_I2C_STOP << ((3-h2)*2)); | 80 | op[h1] |= cpu_to_le32(SAA7146_I2C_STOP << ((3-h2)*2)); |
81 | } | 81 | } |
82 | 82 | ||
83 | /* return the number of u32s to send */ | 83 | /* return the number of u32s to send */ |
@@ -88,7 +88,7 @@ static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) | |||
88 | which bytes were read through the adapter and write them back to the corresponding | 88 | which bytes were read through the adapter and write them back to the corresponding |
89 | i2c-message. but instead, we simply write back all bytes. | 89 | i2c-message. but instead, we simply write back all bytes. |
90 | fixme: this could be improved. */ | 90 | fixme: this could be improved. */ |
91 | static int saa7146_i2c_msg_cleanup(const struct i2c_msg *m, int num, u32 *op) | 91 | static int saa7146_i2c_msg_cleanup(const struct i2c_msg *m, int num, __le32 *op) |
92 | { | 92 | { |
93 | int i, j; | 93 | int i, j; |
94 | int op_count = 0; | 94 | int op_count = 0; |
@@ -101,7 +101,7 @@ static int saa7146_i2c_msg_cleanup(const struct i2c_msg *m, int num, u32 *op) | |||
101 | /* loop throgh all bytes of message i */ | 101 | /* loop throgh all bytes of message i */ |
102 | for(j = 0; j < m[i].len; j++) { | 102 | for(j = 0; j < m[i].len; j++) { |
103 | /* write back all bytes that could have been read */ | 103 | /* write back all bytes that could have been read */ |
104 | m[i].buf[j] = (op[op_count/3] >> ((3-(op_count%3))*8)); | 104 | m[i].buf[j] = (le32_to_cpu(op[op_count/3]) >> ((3-(op_count%3))*8)); |
105 | op_count++; | 105 | op_count++; |
106 | } | 106 | } |
107 | } | 107 | } |
@@ -174,7 +174,7 @@ static int saa7146_i2c_reset(struct saa7146_dev *dev) | |||
174 | /* this functions writes out the data-byte 'dword' to the i2c-device. | 174 | /* this functions writes out the data-byte 'dword' to the i2c-device. |
175 | it returns 0 if ok, -1 if the transfer failed, -2 if the transfer | 175 | it returns 0 if ok, -1 if the transfer failed, -2 if the transfer |
176 | failed badly (e.g. address error) */ | 176 | failed badly (e.g. address error) */ |
177 | static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_delay) | 177 | static int saa7146_i2c_writeout(struct saa7146_dev *dev, __le32 *dword, int short_delay) |
178 | { | 178 | { |
179 | u32 status = 0, mc2 = 0; | 179 | u32 status = 0, mc2 = 0; |
180 | int trial = 0; | 180 | int trial = 0; |
@@ -186,7 +186,7 @@ static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_d | |||
186 | if( 0 != (SAA7146_USE_I2C_IRQ & dev->ext->flags)) { | 186 | if( 0 != (SAA7146_USE_I2C_IRQ & dev->ext->flags)) { |
187 | 187 | ||
188 | saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); | 188 | saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); |
189 | saa7146_write(dev, I2C_TRANSFER, *dword); | 189 | saa7146_write(dev, I2C_TRANSFER, le32_to_cpu(*dword)); |
190 | 190 | ||
191 | dev->i2c_op = 1; | 191 | dev->i2c_op = 1; |
192 | SAA7146_ISR_CLEAR(dev, MASK_16|MASK_17); | 192 | SAA7146_ISR_CLEAR(dev, MASK_16|MASK_17); |
@@ -209,7 +209,7 @@ static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_d | |||
209 | status = saa7146_read(dev, I2C_STATUS); | 209 | status = saa7146_read(dev, I2C_STATUS); |
210 | } else { | 210 | } else { |
211 | saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); | 211 | saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); |
212 | saa7146_write(dev, I2C_TRANSFER, *dword); | 212 | saa7146_write(dev, I2C_TRANSFER, le32_to_cpu(*dword)); |
213 | saa7146_write(dev, MC2, (MASK_00 | MASK_16)); | 213 | saa7146_write(dev, MC2, (MASK_00 | MASK_16)); |
214 | 214 | ||
215 | /* do not poll for i2c-status before upload is complete */ | 215 | /* do not poll for i2c-status before upload is complete */ |
@@ -282,7 +282,7 @@ static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_d | |||
282 | } | 282 | } |
283 | 283 | ||
284 | /* read back data, just in case we were reading ... */ | 284 | /* read back data, just in case we were reading ... */ |
285 | *dword = saa7146_read(dev, I2C_TRANSFER); | 285 | *dword = cpu_to_le32(saa7146_read(dev, I2C_TRANSFER)); |
286 | 286 | ||
287 | DEB_I2C(("after: 0x%08x\n",*dword)); | 287 | DEB_I2C(("after: 0x%08x\n",*dword)); |
288 | return 0; | 288 | return 0; |
@@ -291,7 +291,7 @@ static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_d | |||
291 | static int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *msgs, int num, int retries) | 291 | static int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *msgs, int num, int retries) |
292 | { | 292 | { |
293 | int i = 0, count = 0; | 293 | int i = 0, count = 0; |
294 | u32* buffer = dev->d_i2c.cpu_addr; | 294 | __le32 *buffer = dev->d_i2c.cpu_addr; |
295 | int err = 0; | 295 | int err = 0; |
296 | int address_err = 0; | 296 | int address_err = 0; |
297 | int short_delay = 0; | 297 | int short_delay = 0; |
@@ -376,7 +376,7 @@ out: | |||
376 | /* another bug in revision 0: the i2c-registers get uploaded randomly by other | 376 | /* another bug in revision 0: the i2c-registers get uploaded randomly by other |
377 | uploads, so we better clear them out before continueing */ | 377 | uploads, so we better clear them out before continueing */ |
378 | if( 0 == dev->revision ) { | 378 | if( 0 == dev->revision ) { |
379 | u32 zero = 0; | 379 | __le32 zero = 0; |
380 | saa7146_i2c_reset(dev); | 380 | saa7146_i2c_reset(dev); |
381 | if( 0 != saa7146_i2c_writeout(dev, &zero, short_delay)) { | 381 | if( 0 != saa7146_i2c_writeout(dev, &zero, short_delay)) { |
382 | INFO(("revision 0 error. this should never happen.\n")); | 382 | INFO(("revision 0 error. this should never happen.\n")); |
diff --git a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c index 3cbc6ebbe649..a5e62750eea3 100644 --- a/drivers/media/common/saa7146_video.c +++ b/drivers/media/common/saa7146_video.c | |||
@@ -605,8 +605,8 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu | |||
605 | struct saa7146_pgtable *pt1 = &buf->pt[0]; | 605 | struct saa7146_pgtable *pt1 = &buf->pt[0]; |
606 | struct saa7146_pgtable *pt2 = &buf->pt[1]; | 606 | struct saa7146_pgtable *pt2 = &buf->pt[1]; |
607 | struct saa7146_pgtable *pt3 = &buf->pt[2]; | 607 | struct saa7146_pgtable *pt3 = &buf->pt[2]; |
608 | u32 *ptr1, *ptr2, *ptr3; | 608 | __le32 *ptr1, *ptr2, *ptr3; |
609 | u32 fill; | 609 | __le32 fill; |
610 | 610 | ||
611 | int size = buf->fmt->width*buf->fmt->height; | 611 | int size = buf->fmt->width*buf->fmt->height; |
612 | int i,p,m1,m2,m3,o1,o2; | 612 | int i,p,m1,m2,m3,o1,o2; |