Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
spi-mpc512x-psc.c
Go to the documentation of this file.
1 /*
2  * MPC512x PSC in SPI mode driver.
3  *
4  * Copyright (C) 2007,2008 Freescale Semiconductor Inc.
5  * Original port from 52xx driver:
6  * Hongjun Chen <[email protected]>
7  *
8  * Fork of mpc52xx_psc_spi.c:
9  * Copyright (C) 2006 TOPTICA Photonics AG., Dragos Carp
10  *
11  * This program is free software; you can redistribute it and/or modify it
12  * under the terms of the GNU General Public License as published by the
13  * Free Software Foundation; either version 2 of the License, or (at your
14  * option) any later version.
15  */
16 
17 #include <linux/module.h>
18 #include <linux/kernel.h>
19 #include <linux/init.h>
20 #include <linux/errno.h>
21 #include <linux/interrupt.h>
22 #include <linux/of_address.h>
23 #include <linux/of_platform.h>
24 #include <linux/workqueue.h>
25 #include <linux/completion.h>
26 #include <linux/io.h>
27 #include <linux/delay.h>
28 #include <linux/clk.h>
29 #include <linux/spi/spi.h>
30 #include <linux/fsl_devices.h>
31 #include <asm/mpc52xx_psc.h>
32 
34  void (*cs_control)(struct spi_device *spi, bool on);
36 
37  /* driver internal data */
40  unsigned int irq;
45 
47  struct work_struct work;
48 
49  struct list_head queue;
50  spinlock_t lock; /* Message queue lock */
51 
52  struct completion done;
53 };
54 
55 /* controller state */
58  int speed_hz;
59 };
60 
61 /* set clock freq, clock ramp, bits per work
62  * if t is NULL then reset the values to the default values
63  */
64 static int mpc512x_psc_spi_transfer_setup(struct spi_device *spi,
65  struct spi_transfer *t)
66 {
67  struct mpc512x_psc_spi_cs *cs = spi->controller_state;
68 
69  cs->speed_hz = (t && t->speed_hz)
70  ? t->speed_hz : spi->max_speed_hz;
71  cs->bits_per_word = (t && t->bits_per_word)
72  ? t->bits_per_word : spi->bits_per_word;
73  cs->bits_per_word = ((cs->bits_per_word + 7) / 8) * 8;
74  return 0;
75 }
76 
77 static void mpc512x_psc_spi_activate_cs(struct spi_device *spi)
78 {
79  struct mpc512x_psc_spi_cs *cs = spi->controller_state;
80  struct mpc512x_psc_spi *mps = spi_master_get_devdata(spi->master);
81  struct mpc52xx_psc __iomem *psc = mps->psc;
82  u32 sicr;
83  u32 ccr;
84  u16 bclkdiv;
85 
86  sicr = in_be32(&psc->sicr);
87 
88  /* Set clock phase and polarity */
89  if (spi->mode & SPI_CPHA)
90  sicr |= 0x00001000;
91  else
92  sicr &= ~0x00001000;
93 
94  if (spi->mode & SPI_CPOL)
95  sicr |= 0x00002000;
96  else
97  sicr &= ~0x00002000;
98 
99  if (spi->mode & SPI_LSB_FIRST)
100  sicr |= 0x10000000;
101  else
102  sicr &= ~0x10000000;
103  out_be32(&psc->sicr, sicr);
104 
105  ccr = in_be32(&psc->ccr);
106  ccr &= 0xFF000000;
107  if (cs->speed_hz)
108  bclkdiv = (mps->mclk / cs->speed_hz) - 1;
109  else
110  bclkdiv = (mps->mclk / 1000000) - 1; /* default 1MHz */
111 
112  ccr |= (((bclkdiv & 0xff) << 16) | (((bclkdiv >> 8) & 0xff) << 8));
113  out_be32(&psc->ccr, ccr);
114  mps->bits_per_word = cs->bits_per_word;
115 
116  if (mps->cs_control)
117  mps->cs_control(spi, (spi->mode & SPI_CS_HIGH) ? 1 : 0);
118 }
119 
120 static void mpc512x_psc_spi_deactivate_cs(struct spi_device *spi)
121 {
122  struct mpc512x_psc_spi *mps = spi_master_get_devdata(spi->master);
123 
124  if (mps->cs_control)
125  mps->cs_control(spi, (spi->mode & SPI_CS_HIGH) ? 0 : 1);
126 
127 }
128 
129 /* extract and scale size field in txsz or rxsz */
130 #define MPC512x_PSC_FIFO_SZ(sz) ((sz & 0x7ff) << 2);
131 
132 #define EOFBYTE 1
133 
134 static int mpc512x_psc_spi_transfer_rxtx(struct spi_device *spi,
135  struct spi_transfer *t)
136 {
137  struct mpc512x_psc_spi *mps = spi_master_get_devdata(spi->master);
138  struct mpc52xx_psc __iomem *psc = mps->psc;
139  struct mpc512x_psc_fifo __iomem *fifo = mps->fifo;
140  size_t len = t->len;
141  u8 *tx_buf = (u8 *)t->tx_buf;
142  u8 *rx_buf = (u8 *)t->rx_buf;
143 
144  if (!tx_buf && !rx_buf && t->len)
145  return -EINVAL;
146 
147  /* Zero MR2 */
148  in_8(&psc->mode);
149  out_8(&psc->mode, 0x0);
150 
151  while (len) {
152  int count;
153  int i;
154  u8 data;
155  size_t fifosz;
156  int rxcount;
157 
158  /*
159  * The number of bytes that can be sent at a time
160  * depends on the fifo size.
161  */
162  fifosz = MPC512x_PSC_FIFO_SZ(in_be32(&fifo->txsz));
163  count = min(fifosz, len);
164 
165  for (i = count; i > 0; i--) {
166  data = tx_buf ? *tx_buf++ : 0;
167  if (len == EOFBYTE)
168  setbits32(&fifo->txcmd, MPC512x_PSC_FIFO_EOF);
169  out_8(&fifo->txdata_8, data);
170  len--;
171  }
172 
173  INIT_COMPLETION(mps->done);
174 
175  /* interrupt on tx fifo empty */
178 
179  /* enable transmiter/receiver */
180  out_8(&psc->command,
182 
183  wait_for_completion(&mps->done);
184 
185  mdelay(1);
186 
187  /* rx fifo should have count bytes in it */
188  rxcount = in_be32(&fifo->rxcnt);
189  if (rxcount != count)
190  mdelay(1);
191 
192  rxcount = in_be32(&fifo->rxcnt);
193  if (rxcount != count) {
194  dev_warn(&spi->dev, "expected %d bytes in rx fifo "
195  "but got %d\n", count, rxcount);
196  }
197 
198  rxcount = min(rxcount, count);
199  for (i = rxcount; i > 0; i--) {
200  data = in_8(&fifo->rxdata_8);
201  if (rx_buf)
202  *rx_buf++ = data;
203  }
204  while (in_be32(&fifo->rxcnt)) {
205  in_8(&fifo->rxdata_8);
206  }
207 
208  out_8(&psc->command,
210  }
211  /* disable transmiter/receiver and fifo interrupt */
213  out_be32(&fifo->tximr, 0);
214  return 0;
215 }
216 
217 static void mpc512x_psc_spi_work(struct work_struct *work)
218 {
219  struct mpc512x_psc_spi *mps = container_of(work,
220  struct mpc512x_psc_spi,
221  work);
222 
223  spin_lock_irq(&mps->lock);
224  mps->busy = 1;
225  while (!list_empty(&mps->queue)) {
226  struct spi_message *m;
227  struct spi_device *spi;
228  struct spi_transfer *t = NULL;
229  unsigned cs_change;
230  int status;
231 
232  m = container_of(mps->queue.next, struct spi_message, queue);
233  list_del_init(&m->queue);
234  spin_unlock_irq(&mps->lock);
235 
236  spi = m->spi;
237  cs_change = 1;
238  status = 0;
240  if (t->bits_per_word || t->speed_hz) {
241  status = mpc512x_psc_spi_transfer_setup(spi, t);
242  if (status < 0)
243  break;
244  }
245 
246  if (cs_change)
247  mpc512x_psc_spi_activate_cs(spi);
248  cs_change = t->cs_change;
249 
250  status = mpc512x_psc_spi_transfer_rxtx(spi, t);
251  if (status)
252  break;
253  m->actual_length += t->len;
254 
255  if (t->delay_usecs)
256  udelay(t->delay_usecs);
257 
258  if (cs_change)
259  mpc512x_psc_spi_deactivate_cs(spi);
260  }
261 
262  m->status = status;
263  m->complete(m->context);
264 
265  if (status || !cs_change)
266  mpc512x_psc_spi_deactivate_cs(spi);
267 
268  mpc512x_psc_spi_transfer_setup(spi, NULL);
269 
270  spin_lock_irq(&mps->lock);
271  }
272  mps->busy = 0;
273  spin_unlock_irq(&mps->lock);
274 }
275 
276 static int mpc512x_psc_spi_setup(struct spi_device *spi)
277 {
278  struct mpc512x_psc_spi *mps = spi_master_get_devdata(spi->master);
279  struct mpc512x_psc_spi_cs *cs = spi->controller_state;
280  unsigned long flags;
281 
282  if (spi->bits_per_word % 8)
283  return -EINVAL;
284 
285  if (!cs) {
286  cs = kzalloc(sizeof *cs, GFP_KERNEL);
287  if (!cs)
288  return -ENOMEM;
289  spi->controller_state = cs;
290  }
291 
292  cs->bits_per_word = spi->bits_per_word;
293  cs->speed_hz = spi->max_speed_hz;
294 
295  spin_lock_irqsave(&mps->lock, flags);
296  if (!mps->busy)
297  mpc512x_psc_spi_deactivate_cs(spi);
298  spin_unlock_irqrestore(&mps->lock, flags);
299 
300  return 0;
301 }
302 
303 static int mpc512x_psc_spi_transfer(struct spi_device *spi,
304  struct spi_message *m)
305 {
306  struct mpc512x_psc_spi *mps = spi_master_get_devdata(spi->master);
307  unsigned long flags;
308 
309  m->actual_length = 0;
310  m->status = -EINPROGRESS;
311 
312  spin_lock_irqsave(&mps->lock, flags);
313  list_add_tail(&m->queue, &mps->queue);
314  queue_work(mps->workqueue, &mps->work);
315  spin_unlock_irqrestore(&mps->lock, flags);
316 
317  return 0;
318 }
319 
320 static void mpc512x_psc_spi_cleanup(struct spi_device *spi)
321 {
322  kfree(spi->controller_state);
323 }
324 
325 static int mpc512x_psc_spi_port_config(struct spi_master *master,
326  struct mpc512x_psc_spi *mps)
327 {
328  struct mpc52xx_psc __iomem *psc = mps->psc;
329  struct mpc512x_psc_fifo __iomem *fifo = mps->fifo;
330  struct clk *spiclk;
331  int ret = 0;
332  char name[32];
333  u32 sicr;
334  u32 ccr;
335  u16 bclkdiv;
336 
337  sprintf(name, "psc%d_mclk", master->bus_num);
338  spiclk = clk_get(&master->dev, name);
339  clk_enable(spiclk);
340  mps->mclk = clk_get_rate(spiclk);
341  clk_put(spiclk);
342 
343  /* Reset the PSC into a known state */
347 
348  /* Disable psc interrupts all useful interrupts are in fifo */
349  out_be16(&psc->isr_imr.imr, 0);
350 
351  /* Disable fifo interrupts, will be enabled later */
352  out_be32(&fifo->tximr, 0);
353  out_be32(&fifo->rximr, 0);
354 
355  /* Setup fifo slice address and size */
356  /*out_be32(&fifo->txsz, 0x0fe00004);*/
357  /*out_be32(&fifo->rxsz, 0x0ff00004);*/
358 
359  sicr = 0x01000000 | /* SIM = 0001 -- 8 bit */
360  0x00800000 | /* GenClk = 1 -- internal clk */
361  0x00008000 | /* SPI = 1 */
362  0x00004000 | /* MSTR = 1 -- SPI master */
363  0x00000800; /* UseEOF = 1 -- SS low until EOF */
364 
365  out_be32(&psc->sicr, sicr);
366 
367  ccr = in_be32(&psc->ccr);
368  ccr &= 0xFF000000;
369  bclkdiv = (mps->mclk / 1000000) - 1; /* default 1MHz */
370  ccr |= (((bclkdiv & 0xff) << 16) | (((bclkdiv >> 8) & 0xff) << 8));
371  out_be32(&psc->ccr, ccr);
372 
373  /* Set 2ms DTL delay */
374  out_8(&psc->ctur, 0x00);
375  out_8(&psc->ctlr, 0x82);
376 
377  /* we don't use the alarms */
378  out_be32(&fifo->rxalarm, 0xfff);
379  out_be32(&fifo->txalarm, 0);
380 
381  /* Enable FIFO slices for Rx/Tx */
382  out_be32(&fifo->rxcmd,
384  out_be32(&fifo->txcmd,
386 
387  mps->bits_per_word = 8;
388 
389  return ret;
390 }
391 
392 static irqreturn_t mpc512x_psc_spi_isr(int irq, void *dev_id)
393 {
394  struct mpc512x_psc_spi *mps = (struct mpc512x_psc_spi *)dev_id;
395  struct mpc512x_psc_fifo __iomem *fifo = mps->fifo;
396 
397  /* clear interrupt and wake up the work queue */
398  if (in_be32(&fifo->txisr) &
401  out_be32(&fifo->tximr, 0);
402  complete(&mps->done);
403  return IRQ_HANDLED;
404  }
405  return IRQ_NONE;
406 }
407 
408 /* bus_num is used only for the case dev->platform_data == NULL */
409 static int __devinit mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
410  u32 size, unsigned int irq,
411  s16 bus_num)
412 {
414  struct mpc512x_psc_spi *mps;
415  struct spi_master *master;
416  int ret;
417  void *tempp;
418 
419  master = spi_alloc_master(dev, sizeof *mps);
420  if (master == NULL)
421  return -ENOMEM;
422 
423  dev_set_drvdata(dev, master);
424  mps = spi_master_get_devdata(master);
425  mps->irq = irq;
426 
427  if (pdata == NULL) {
428  dev_err(dev, "probe called without platform data, no "
429  "cs_control function will be called\n");
430  mps->cs_control = NULL;
431  mps->sysclk = 0;
432  master->bus_num = bus_num;
433  master->num_chipselect = 255;
434  } else {
435  mps->cs_control = pdata->cs_control;
436  mps->sysclk = pdata->sysclk;
437  master->bus_num = pdata->bus_num;
438  master->num_chipselect = pdata->max_chipselect;
439  }
440 
441  master->setup = mpc512x_psc_spi_setup;
442  master->transfer = mpc512x_psc_spi_transfer;
443  master->cleanup = mpc512x_psc_spi_cleanup;
444  master->dev.of_node = dev->of_node;
445 
446  tempp = ioremap(regaddr, size);
447  if (!tempp) {
448  dev_err(dev, "could not ioremap I/O port range\n");
449  ret = -EFAULT;
450  goto free_master;
451  }
452  mps->psc = tempp;
453  mps->fifo =
454  (struct mpc512x_psc_fifo *)(tempp + sizeof(struct mpc52xx_psc));
455 
456  ret = request_irq(mps->irq, mpc512x_psc_spi_isr, IRQF_SHARED,
457  "mpc512x-psc-spi", mps);
458  if (ret)
459  goto free_master;
460 
461  ret = mpc512x_psc_spi_port_config(master, mps);
462  if (ret < 0)
463  goto free_irq;
464 
465  spin_lock_init(&mps->lock);
466  init_completion(&mps->done);
467  INIT_WORK(&mps->work, mpc512x_psc_spi_work);
468  INIT_LIST_HEAD(&mps->queue);
469 
470  mps->workqueue =
471  create_singlethread_workqueue(dev_name(master->dev.parent));
472  if (mps->workqueue == NULL) {
473  ret = -EBUSY;
474  goto free_irq;
475  }
476 
477  ret = spi_register_master(master);
478  if (ret < 0)
479  goto unreg_master;
480 
481  return ret;
482 
483 unreg_master:
485 free_irq:
486  free_irq(mps->irq, mps);
487 free_master:
488  if (mps->psc)
489  iounmap(mps->psc);
490  spi_master_put(master);
491 
492  return ret;
493 }
494 
495 static int __devexit mpc512x_psc_spi_do_remove(struct device *dev)
496 {
497  struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
498  struct mpc512x_psc_spi *mps = spi_master_get_devdata(master);
499 
502  spi_unregister_master(master);
503  free_irq(mps->irq, mps);
504  if (mps->psc)
505  iounmap(mps->psc);
506  spi_master_put(master);
507 
508  return 0;
509 }
510 
511 static int __devinit mpc512x_psc_spi_of_probe(struct platform_device *op)
512 {
513  const u32 *regaddr_p;
514  u64 regaddr64, size64;
515  s16 id = -1;
516 
517  regaddr_p = of_get_address(op->dev.of_node, 0, &size64, NULL);
518  if (!regaddr_p) {
519  dev_err(&op->dev, "Invalid PSC address\n");
520  return -EINVAL;
521  }
522  regaddr64 = of_translate_address(op->dev.of_node, regaddr_p);
523 
524  /* get PSC id (0..11, used by port_config) */
525  if (op->dev.platform_data == NULL) {
526  const u32 *psc_nump;
527 
528  psc_nump = of_get_property(op->dev.of_node, "cell-index", NULL);
529  if (!psc_nump || *psc_nump > 11) {
530  dev_err(&op->dev, "mpc512x_psc_spi: Device node %s "
531  "has invalid cell-index property\n",
532  op->dev.of_node->full_name);
533  return -EINVAL;
534  }
535  id = *psc_nump;
536  }
537 
538  return mpc512x_psc_spi_do_probe(&op->dev, (u32) regaddr64, (u32) size64,
539  irq_of_parse_and_map(op->dev.of_node, 0), id);
540 }
541 
542 static int __devexit mpc512x_psc_spi_of_remove(struct platform_device *op)
543 {
544  return mpc512x_psc_spi_do_remove(&op->dev);
545 }
546 
547 static struct of_device_id mpc512x_psc_spi_of_match[] = {
548  { .compatible = "fsl,mpc5121-psc-spi", },
549  {},
550 };
551 
552 MODULE_DEVICE_TABLE(of, mpc512x_psc_spi_of_match);
553 
554 static struct platform_driver mpc512x_psc_spi_of_driver = {
555  .probe = mpc512x_psc_spi_of_probe,
556  .remove = __devexit_p(mpc512x_psc_spi_of_remove),
557  .driver = {
558  .name = "mpc512x-psc-spi",
559  .owner = THIS_MODULE,
560  .of_match_table = mpc512x_psc_spi_of_match,
561  },
562 };
563 module_platform_driver(mpc512x_psc_spi_of_driver);
564 
565 MODULE_AUTHOR("John Rigby");
566 MODULE_DESCRIPTION("MPC512x PSC SPI Driver");
567 MODULE_LICENSE("GPL");