53
53
54
54
struct spidev_data {
55
55
struct spi_device * spi ;
56
- struct mutex spi_lock ;
56
+ struct mutex lock ;
57
57
u32 speed_hz ;
58
- struct mutex txb_lock ;
59
- u8 * x8h7_txb_1 ;
60
- u8 * x8h7_txb_2 ;
61
- u8 * x8h7_txb_active ;
62
- u8 * x8h7_txb_transfer ;
63
- u16 x8h7_txl_active ;
64
- u16 x8h7_txl_transfer ;
58
+ u8 * x8h7_txb ;
59
+ u16 x8h7_txl ;
65
60
u8 * x8h7_rxb ;
66
61
};
67
62
@@ -182,9 +177,9 @@ int x8h7_pkt_enq(uint8_t peripheral, uint8_t opcode, uint16_t size, void *data)
182
177
x8h7_subpkt_t * pkt ;
183
178
uint8_t * ptr ;
184
179
185
- mutex_lock (& spidev -> txb_lock );
180
+ mutex_lock (& spidev -> lock );
186
181
187
- ptr = spidev -> x8h7_txb_active ;
182
+ ptr = spidev -> x8h7_txb ;
188
183
hdr = (x8h7_pkthdr_t * )ptr ;
189
184
190
185
if ((hdr -> size + sizeof (x8h7_subpkt_t ) + size ) < X8H7_BUF_SIZE ) {
@@ -203,12 +198,12 @@ int x8h7_pkt_enq(uint8_t peripheral, uint8_t opcode, uint16_t size, void *data)
203
198
}
204
199
hdr -> size += sizeof (x8h7_subpkt_t ) + size ;
205
200
hdr -> checksum = hdr -> size ^ 0x5555 ;
206
- spidev -> x8h7_txl_active = hdr -> size ;
207
- mutex_unlock (& spidev -> txb_lock );
201
+ spidev -> x8h7_txl = hdr -> size ;
202
+ mutex_unlock (& spidev -> lock );
208
203
return 0 ;
209
204
}
210
205
211
- mutex_unlock (& spidev -> txb_lock );
206
+ mutex_unlock (& spidev -> lock );
212
207
213
208
return -1 ;
214
209
}
@@ -320,47 +315,35 @@ static inline int x8h7_pkt_send_priv(int arg)
320
315
x8h7_pkthdr_t * hdr ;
321
316
int len ;
322
317
323
- DBG_PRINT ("\n" );
324
-
325
- mutex_lock (& spidev -> txb_lock );
326
-
327
- spidev -> x8h7_txb_transfer = spidev -> x8h7_txb_active ;
328
- spidev -> x8h7_txb_active = (spidev -> x8h7_txb_active == spidev -> x8h7_txb_1 ) ? spidev -> x8h7_txb_2 : spidev -> x8h7_txb_1 ;
329
- memset (spidev -> x8h7_txb_active , 0 , X8H7_BUF_SIZE );
330
-
331
- spidev -> x8h7_txl_transfer = spidev -> x8h7_txl_active ;
332
- spidev -> x8h7_txl_active = 0 ;
333
-
334
- mutex_unlock (& spidev -> txb_lock );
318
+ mutex_lock (& spidev -> lock );
335
319
336
-
337
- mutex_lock (& spidev -> spi_lock );
320
+ DBG_PRINT ("\n" );
338
321
339
322
/* Exchange of the packet header. */
340
323
x8h7_spi_trx (spidev -> spi ,
341
- spidev -> x8h7_txb_transfer , spidev -> x8h7_rxb , sizeof (x8h7_pkthdr_t ));
324
+ spidev -> x8h7_txb , spidev -> x8h7_rxb , sizeof (x8h7_pkthdr_t ));
342
325
343
326
hdr = (x8h7_pkthdr_t * )spidev -> x8h7_rxb ;
344
327
if ((hdr -> size != 0 ) && ((hdr -> size ^ 0x5555 ) != hdr -> checksum )) {
345
328
DBG_ERROR ("Out of sync %04x %04x\n" , hdr -> size , hdr -> checksum );
346
- mutex_unlock (& spidev -> spi_lock );
329
+ mutex_unlock (& spidev -> lock );
347
330
return -1 ;
348
331
}
349
332
350
- len = max (hdr -> size , spidev -> x8h7_txl_transfer );
333
+ len = max (hdr -> size , spidev -> x8h7_txl );
351
334
if (len == 0 ) {
352
335
DBG_ERROR ("Transaction length is zero\n" );
353
336
x8h7_spi_trx (spidev -> spi ,
354
- spidev -> x8h7_txb_transfer + sizeof (x8h7_pkthdr_t ), spidev -> x8h7_rxb ,
337
+ spidev -> x8h7_txb + sizeof (x8h7_pkthdr_t ), spidev -> x8h7_rxb ,
355
338
sizeof (x8h7_pkthdr_t ));
356
- mutex_unlock (& spidev -> spi_lock );
339
+ mutex_unlock (& spidev -> lock );
357
340
return 0 ;
358
341
}
359
342
360
- pkt_dump ("Send" , spidev -> x8h7_txb_transfer );
343
+ pkt_dump ("Send" , spidev -> x8h7_txb );
361
344
362
345
x8h7_spi_trx (spidev -> spi ,
363
- spidev -> x8h7_txb_transfer + sizeof (x8h7_pkthdr_t ),
346
+ spidev -> x8h7_txb + sizeof (x8h7_pkthdr_t ),
364
347
spidev -> x8h7_rxb + sizeof (x8h7_pkthdr_t ), len );
365
348
366
349
hdr = (x8h7_pkthdr_t * )spidev -> x8h7_rxb ;
@@ -375,7 +358,7 @@ static inline int x8h7_pkt_send_priv(int arg)
375
358
376
359
memset (spidev -> x8h7_rxb , 0 , X8H7_BUF_SIZE );
377
360
378
- mutex_unlock (& spidev -> spi_lock );
361
+ mutex_unlock (& spidev -> lock );
379
362
return 0 ;
380
363
}
381
364
@@ -434,7 +417,7 @@ static int x8h7_probe(struct spi_device *spi)
434
417
435
418
/* Initialize the driver data */
436
419
spidev -> spi = spi ;
437
- mutex_init (& spidev -> spi_lock );
420
+ mutex_init (& spidev -> lock );
438
421
439
422
/* Device speed */
440
423
if (!of_property_read_u32 (spi -> dev .of_node , "spi-max-frequency" , & value ))
@@ -443,35 +426,14 @@ static int x8h7_probe(struct spi_device *spi)
443
426
444
427
status = 0 ;
445
428
446
- mutex_init (& spidev -> txb_lock );
447
-
448
- if (status == 0 ) {
449
- spidev -> x8h7_txb_1 = devm_kzalloc (& spi -> dev , X8H7_BUF_SIZE , GFP_KERNEL );
450
- if (!spidev -> x8h7_txb_1 ) {
451
- DBG_ERROR ("X8H7 Tx buffer 1 memory fail\n" );
452
- status = - ENOMEM ;
453
- }
454
- }
455
-
456
429
if (status == 0 ) {
457
- spidev -> x8h7_txb_2 = devm_kzalloc (& spi -> dev , X8H7_BUF_SIZE , GFP_KERNEL );
458
- if (!spidev -> x8h7_txb_2 ) {
459
- DBG_ERROR ("X8H7 Tx buffer 2 memory fail\n" );
430
+ spidev -> x8h7_txb = devm_kzalloc (& spi -> dev , X8H7_BUF_SIZE , GFP_KERNEL );
431
+ if (!spidev -> x8h7_txb ) {
432
+ DBG_ERROR ("X8H7 Tx buffer memory fail\n" );
460
433
status = - ENOMEM ;
461
434
}
462
435
}
463
436
464
- if (status == 0 )
465
- {
466
- memset (spidev -> x8h7_txb_1 , 0 , X8H7_BUF_SIZE );
467
- memset (spidev -> x8h7_txb_2 , 0 , X8H7_BUF_SIZE );
468
-
469
- spidev -> x8h7_txb_active = spidev -> x8h7_txb_1 ;
470
- spidev -> x8h7_txb_transfer = 0 ;
471
- spidev -> x8h7_txl_active = 0 ;
472
- spidev -> x8h7_txl_transfer = 0 ;
473
- }
474
-
475
437
if (status == 0 ) {
476
438
spidev -> x8h7_rxb = devm_kzalloc (& spi -> dev , X8H7_BUF_SIZE , GFP_KERNEL );
477
439
if (!spidev -> x8h7_rxb ) {
@@ -480,6 +442,10 @@ static int x8h7_probe(struct spi_device *spi)
480
442
}
481
443
}
482
444
445
+ memset (spidev -> x8h7_txb , 0 , X8H7_BUF_SIZE );
446
+ memset (spidev -> x8h7_rxb , 0 , X8H7_BUF_SIZE );
447
+ spidev -> x8h7_txl = 0 ;
448
+
483
449
/* Configure interrupt request */
484
450
if (spi -> irq > 0 ) {
485
451
int ret ;
0 commit comments