Source
35
35
void (*cs_control)(struct spi_device *spi, bool on);
36
36
u32 sysclk;
37
37
38
38
/* driver internal data */
39
39
struct mpc52xx_psc __iomem *psc;
40
40
struct mpc52xx_psc_fifo __iomem *fifo;
41
41
unsigned int irq;
42
42
u8 bits_per_word;
43
43
u8 busy;
44
44
45
-
struct workqueue_struct *workqueue;
46
45
struct work_struct work;
47
46
48
47
struct list_head queue;
49
48
spinlock_t lock;
50
49
51
50
struct completion done;
52
51
};
53
52
54
53
/* controller state */
55
54
struct mpc52xx_psc_spi_cs {
292
291
struct spi_message *m)
293
292
{
294
293
struct mpc52xx_psc_spi *mps = spi_master_get_devdata(spi->master);
295
294
unsigned long flags;
296
295
297
296
m->actual_length = 0;
298
297
m->status = -EINPROGRESS;
299
298
300
299
spin_lock_irqsave(&mps->lock, flags);
301
300
list_add_tail(&m->queue, &mps->queue);
302
-
queue_work(mps->workqueue, &mps->work);
301
+
schedule_work(&mps->work);
303
302
spin_unlock_irqrestore(&mps->lock, flags);
304
303
305
304
return 0;
306
305
}
307
306
308
307
static void mpc52xx_psc_spi_cleanup(struct spi_device *spi)
309
308
{
310
309
kfree(spi->controller_state);
311
310
}
312
311
418
417
if (ret < 0) {
419
418
dev_err(dev, "can't configure PSC! Is it capable of SPI?\n");
420
419
goto free_irq;
421
420
}
422
421
423
422
spin_lock_init(&mps->lock);
424
423
init_completion(&mps->done);
425
424
INIT_WORK(&mps->work, mpc52xx_psc_spi_work);
426
425
INIT_LIST_HEAD(&mps->queue);
427
426
428
-
mps->workqueue = create_singlethread_workqueue(
429
-
dev_name(master->dev.parent));
430
-
if (mps->workqueue == NULL) {
431
-
ret = -EBUSY;
432
-
goto free_irq;
433
-
}
434
-
435
427
ret = spi_register_master(master);
436
428
if (ret < 0)
437
-
goto unreg_master;
429
+
goto free_irq;
438
430
439
431
return ret;
440
432
441
-
unreg_master:
442
-
destroy_workqueue(mps->workqueue);
443
433
free_irq:
444
434
free_irq(mps->irq, mps);
445
435
free_master:
446
436
if (mps->psc)
447
437
iounmap(mps->psc);
448
438
spi_master_put(master);
449
439
450
440
return ret;
451
441
}
452
442
477
467
478
468
return mpc52xx_psc_spi_do_probe(&op->dev, (u32)regaddr64, (u32)size64,
479
469
irq_of_parse_and_map(op->dev.of_node, 0), id);
480
470
}
481
471
482
472
static int mpc52xx_psc_spi_of_remove(struct platform_device *op)
483
473
{
484
474
struct spi_master *master = spi_master_get(platform_get_drvdata(op));
485
475
struct mpc52xx_psc_spi *mps = spi_master_get_devdata(master);
486
476
487
-
flush_workqueue(mps->workqueue);
488
-
destroy_workqueue(mps->workqueue);
477
+
flush_work(&mps->work);
489
478
spi_unregister_master(master);
490
479
free_irq(mps->irq, mps);
491
480
if (mps->psc)
492
481
iounmap(mps->psc);
493
482
spi_master_put(master);
494
483
495
484
return 0;
496
485
}
497
486
498
487
static const struct of_device_id mpc52xx_psc_spi_of_match[] = {