spi.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748
  1. /*
  2. * spi.c - SPI init/core code
  3. *
  4. * Copyright (C) 2005 David Brownell
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19. */
  20. #include <linux/kernel.h>
  21. #include <linux/device.h>
  22. #include <linux/init.h>
  23. #include <linux/cache.h>
  24. #include <linux/mutex.h>
  25. #include <linux/spi/spi.h>
  26. /* SPI bustype and spi_master class are registered after board init code
  27. * provides the SPI device tables, ensuring that both are present by the
  28. * time controller driver registration causes spi_devices to "enumerate".
  29. */
  30. static void spidev_release(struct device *dev)
  31. {
  32. struct spi_device *spi = to_spi_device(dev);
  33. /* spi masters may cleanup for released devices */
  34. if (spi->master->cleanup)
  35. spi->master->cleanup(spi);
  36. spi_master_put(spi->master);
  37. kfree(dev);
  38. }
  39. static ssize_t
  40. modalias_show(struct device *dev, struct device_attribute *a, char *buf)
  41. {
  42. const struct spi_device *spi = to_spi_device(dev);
  43. return snprintf(buf, BUS_ID_SIZE + 1, "%s\n", spi->modalias);
  44. }
  45. static struct device_attribute spi_dev_attrs[] = {
  46. __ATTR_RO(modalias),
  47. __ATTR_NULL,
  48. };
  49. /* modalias support makes "modprobe $MODALIAS" new-style hotplug work,
  50. * and the sysfs version makes coldplug work too.
  51. */
  52. static int spi_match_device(struct device *dev, struct device_driver *drv)
  53. {
  54. const struct spi_device *spi = to_spi_device(dev);
  55. return strncmp(spi->modalias, drv->name, BUS_ID_SIZE) == 0;
  56. }
  57. static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
  58. {
  59. const struct spi_device *spi = to_spi_device(dev);
  60. add_uevent_var(env, "MODALIAS=%s", spi->modalias);
  61. return 0;
  62. }
  63. #ifdef CONFIG_PM
  64. static int spi_suspend(struct device *dev, pm_message_t message)
  65. {
  66. int value = 0;
  67. struct spi_driver *drv = to_spi_driver(dev->driver);
  68. /* suspend will stop irqs and dma; no more i/o */
  69. if (drv) {
  70. if (drv->suspend)
  71. value = drv->suspend(to_spi_device(dev), message);
  72. else
  73. dev_dbg(dev, "... can't suspend\n");
  74. }
  75. return value;
  76. }
  77. static int spi_resume(struct device *dev)
  78. {
  79. int value = 0;
  80. struct spi_driver *drv = to_spi_driver(dev->driver);
  81. /* resume may restart the i/o queue */
  82. if (drv) {
  83. if (drv->resume)
  84. value = drv->resume(to_spi_device(dev));
  85. else
  86. dev_dbg(dev, "... can't resume\n");
  87. }
  88. return value;
  89. }
  90. #else
  91. #define spi_suspend NULL
  92. #define spi_resume NULL
  93. #endif
  94. struct bus_type spi_bus_type = {
  95. .name = "spi",
  96. .dev_attrs = spi_dev_attrs,
  97. .match = spi_match_device,
  98. .uevent = spi_uevent,
  99. .suspend = spi_suspend,
  100. .resume = spi_resume,
  101. };
  102. EXPORT_SYMBOL_GPL(spi_bus_type);
  103. static int spi_drv_probe(struct device *dev)
  104. {
  105. const struct spi_driver *sdrv = to_spi_driver(dev->driver);
  106. return sdrv->probe(to_spi_device(dev));
  107. }
  108. static int spi_drv_remove(struct device *dev)
  109. {
  110. const struct spi_driver *sdrv = to_spi_driver(dev->driver);
  111. return sdrv->remove(to_spi_device(dev));
  112. }
  113. static void spi_drv_shutdown(struct device *dev)
  114. {
  115. const struct spi_driver *sdrv = to_spi_driver(dev->driver);
  116. sdrv->shutdown(to_spi_device(dev));
  117. }
  118. /**
  119. * spi_register_driver - register a SPI driver
  120. * @sdrv: the driver to register
  121. * Context: can sleep
  122. */
  123. int spi_register_driver(struct spi_driver *sdrv)
  124. {
  125. sdrv->driver.bus = &spi_bus_type;
  126. if (sdrv->probe)
  127. sdrv->driver.probe = spi_drv_probe;
  128. if (sdrv->remove)
  129. sdrv->driver.remove = spi_drv_remove;
  130. if (sdrv->shutdown)
  131. sdrv->driver.shutdown = spi_drv_shutdown;
  132. return driver_register(&sdrv->driver);
  133. }
  134. EXPORT_SYMBOL_GPL(spi_register_driver);
  135. /*-------------------------------------------------------------------------*/
  136. /* SPI devices should normally not be created by SPI device drivers; that
  137. * would make them board-specific. Similarly with SPI master drivers.
  138. * Device registration normally goes into like arch/.../mach.../board-YYY.c
  139. * with other readonly (flashable) information about mainboard devices.
  140. */
  141. struct boardinfo {
  142. struct list_head list;
  143. unsigned n_board_info;
  144. struct spi_board_info board_info[0];
  145. };
  146. static LIST_HEAD(board_list);
  147. static DEFINE_MUTEX(board_lock);
  148. /**
  149. * spi_alloc_device - Allocate a new SPI device
  150. * @master: Controller to which device is connected
  151. * Context: can sleep
  152. *
  153. * Allows a driver to allocate and initialize a spi_device without
  154. * registering it immediately. This allows a driver to directly
  155. * fill the spi_device with device parameters before calling
  156. * spi_add_device() on it.
  157. *
  158. * Caller is responsible to call spi_add_device() on the returned
  159. * spi_device structure to add it to the SPI master. If the caller
  160. * needs to discard the spi_device without adding it, then it should
  161. * call spi_dev_put() on it.
  162. *
  163. * Returns a pointer to the new device, or NULL.
  164. */
  165. struct spi_device *spi_alloc_device(struct spi_master *master)
  166. {
  167. struct spi_device *spi;
  168. struct device *dev = master->dev.parent;
  169. if (!spi_master_get(master))
  170. return NULL;
  171. spi = kzalloc(sizeof *spi, GFP_KERNEL);
  172. if (!spi) {
  173. dev_err(dev, "cannot alloc spi_device\n");
  174. spi_master_put(master);
  175. return NULL;
  176. }
  177. spi->master = master;
  178. spi->dev.parent = dev;
  179. spi->dev.bus = &spi_bus_type;
  180. spi->dev.release = spidev_release;
  181. device_initialize(&spi->dev);
  182. return spi;
  183. }
  184. EXPORT_SYMBOL_GPL(spi_alloc_device);
  185. /**
  186. * spi_add_device - Add spi_device allocated with spi_alloc_device
  187. * @spi: spi_device to register
  188. *
  189. * Companion function to spi_alloc_device. Devices allocated with
  190. * spi_alloc_device can be added onto the spi bus with this function.
  191. *
  192. * Returns 0 on success; negative errno on failure
  193. */
  194. int spi_add_device(struct spi_device *spi)
  195. {
  196. static DEFINE_MUTEX(spi_add_lock);
  197. struct device *dev = spi->master->dev.parent;
  198. int status;
  199. /* Chipselects are numbered 0..max; validate. */
  200. if (spi->chip_select >= spi->master->num_chipselect) {
  201. dev_err(dev, "cs%d >= max %d\n",
  202. spi->chip_select,
  203. spi->master->num_chipselect);
  204. return -EINVAL;
  205. }
  206. /* Set the bus ID string */
  207. snprintf(spi->dev.bus_id, sizeof spi->dev.bus_id,
  208. "%s.%u", spi->master->dev.bus_id,
  209. spi->chip_select);
  210. /* We need to make sure there's no other device with this
  211. * chipselect **BEFORE** we call setup(), else we'll trash
  212. * its configuration. Lock against concurrent add() calls.
  213. */
  214. mutex_lock(&spi_add_lock);
  215. if (bus_find_device_by_name(&spi_bus_type, NULL, spi->dev.bus_id)
  216. != NULL) {
  217. dev_err(dev, "chipselect %d already in use\n",
  218. spi->chip_select);
  219. status = -EBUSY;
  220. goto done;
  221. }
  222. /* Drivers may modify this initial i/o setup, but will
  223. * normally rely on the device being setup. Devices
  224. * using SPI_CS_HIGH can't coexist well otherwise...
  225. */
  226. status = spi->master->setup(spi);
  227. if (status < 0) {
  228. dev_err(dev, "can't %s %s, status %d\n",
  229. "setup", spi->dev.bus_id, status);
  230. goto done;
  231. }
  232. /* Device may be bound to an active driver when this returns */
  233. status = device_add(&spi->dev);
  234. if (status < 0)
  235. dev_err(dev, "can't %s %s, status %d\n",
  236. "add", spi->dev.bus_id, status);
  237. else
  238. dev_dbg(dev, "registered child %s\n", spi->dev.bus_id);
  239. done:
  240. mutex_unlock(&spi_add_lock);
  241. return status;
  242. }
  243. EXPORT_SYMBOL_GPL(spi_add_device);
  244. /**
  245. * spi_new_device - instantiate one new SPI device
  246. * @master: Controller to which device is connected
  247. * @chip: Describes the SPI device
  248. * Context: can sleep
  249. *
  250. * On typical mainboards, this is purely internal; and it's not needed
  251. * after board init creates the hard-wired devices. Some development
  252. * platforms may not be able to use spi_register_board_info though, and
  253. * this is exported so that for example a USB or parport based adapter
  254. * driver could add devices (which it would learn about out-of-band).
  255. *
  256. * Returns the new device, or NULL.
  257. */
  258. struct spi_device *spi_new_device(struct spi_master *master,
  259. struct spi_board_info *chip)
  260. {
  261. struct spi_device *proxy;
  262. int status;
  263. /* NOTE: caller did any chip->bus_num checks necessary.
  264. *
  265. * Also, unless we change the return value convention to use
  266. * error-or-pointer (not NULL-or-pointer), troubleshootability
  267. * suggests syslogged diagnostics are best here (ugh).
  268. */
  269. proxy = spi_alloc_device(master);
  270. if (!proxy)
  271. return NULL;
  272. WARN_ON(strlen(chip->modalias) >= sizeof(proxy->modalias));
  273. proxy->chip_select = chip->chip_select;
  274. proxy->max_speed_hz = chip->max_speed_hz;
  275. proxy->mode = chip->mode;
  276. proxy->irq = chip->irq;
  277. strlcpy(proxy->modalias, chip->modalias, sizeof(proxy->modalias));
  278. proxy->dev.platform_data = (void *) chip->platform_data;
  279. proxy->controller_data = chip->controller_data;
  280. proxy->controller_state = NULL;
  281. status = spi_add_device(proxy);
  282. if (status < 0) {
  283. spi_dev_put(proxy);
  284. return NULL;
  285. }
  286. return proxy;
  287. }
  288. EXPORT_SYMBOL_GPL(spi_new_device);
  289. /**
  290. * spi_register_board_info - register SPI devices for a given board
  291. * @info: array of chip descriptors
  292. * @n: how many descriptors are provided
  293. * Context: can sleep
  294. *
  295. * Board-specific early init code calls this (probably during arch_initcall)
  296. * with segments of the SPI device table. Any device nodes are created later,
  297. * after the relevant parent SPI controller (bus_num) is defined. We keep
  298. * this table of devices forever, so that reloading a controller driver will
  299. * not make Linux forget about these hard-wired devices.
  300. *
  301. * Other code can also call this, e.g. a particular add-on board might provide
  302. * SPI devices through its expansion connector, so code initializing that board
  303. * would naturally declare its SPI devices.
  304. *
  305. * The board info passed can safely be __initdata ... but be careful of
  306. * any embedded pointers (platform_data, etc), they're copied as-is.
  307. */
  308. int __init
  309. spi_register_board_info(struct spi_board_info const *info, unsigned n)
  310. {
  311. struct boardinfo *bi;
  312. bi = kmalloc(sizeof(*bi) + n * sizeof *info, GFP_KERNEL);
  313. if (!bi)
  314. return -ENOMEM;
  315. bi->n_board_info = n;
  316. memcpy(bi->board_info, info, n * sizeof *info);
  317. mutex_lock(&board_lock);
  318. list_add_tail(&bi->list, &board_list);
  319. mutex_unlock(&board_lock);
  320. return 0;
  321. }
  322. /* FIXME someone should add support for a __setup("spi", ...) that
  323. * creates board info from kernel command lines
  324. */
  325. static void scan_boardinfo(struct spi_master *master)
  326. {
  327. struct boardinfo *bi;
  328. mutex_lock(&board_lock);
  329. list_for_each_entry(bi, &board_list, list) {
  330. struct spi_board_info *chip = bi->board_info;
  331. unsigned n;
  332. for (n = bi->n_board_info; n > 0; n--, chip++) {
  333. if (chip->bus_num != master->bus_num)
  334. continue;
  335. /* NOTE: this relies on spi_new_device to
  336. * issue diagnostics when given bogus inputs
  337. */
  338. (void) spi_new_device(master, chip);
  339. }
  340. }
  341. mutex_unlock(&board_lock);
  342. }
  343. /*-------------------------------------------------------------------------*/
  344. static void spi_master_release(struct device *dev)
  345. {
  346. struct spi_master *master;
  347. master = container_of(dev, struct spi_master, dev);
  348. kfree(master);
  349. }
  350. static struct class spi_master_class = {
  351. .name = "spi_master",
  352. .owner = THIS_MODULE,
  353. .dev_release = spi_master_release,
  354. };
  355. /**
  356. * spi_alloc_master - allocate SPI master controller
  357. * @dev: the controller, possibly using the platform_bus
  358. * @size: how much zeroed driver-private data to allocate; the pointer to this
  359. * memory is in the driver_data field of the returned device,
  360. * accessible with spi_master_get_devdata().
  361. * Context: can sleep
  362. *
  363. * This call is used only by SPI master controller drivers, which are the
  364. * only ones directly touching chip registers. It's how they allocate
  365. * an spi_master structure, prior to calling spi_register_master().
  366. *
  367. * This must be called from context that can sleep. It returns the SPI
  368. * master structure on success, else NULL.
  369. *
  370. * The caller is responsible for assigning the bus number and initializing
  371. * the master's methods before calling spi_register_master(); and (after errors
  372. * adding the device) calling spi_master_put() to prevent a memory leak.
  373. */
  374. struct spi_master *spi_alloc_master(struct device *dev, unsigned size)
  375. {
  376. struct spi_master *master;
  377. if (!dev)
  378. return NULL;
  379. master = kzalloc(size + sizeof *master, GFP_KERNEL);
  380. if (!master)
  381. return NULL;
  382. device_initialize(&master->dev);
  383. master->dev.class = &spi_master_class;
  384. master->dev.parent = get_device(dev);
  385. spi_master_set_devdata(master, &master[1]);
  386. return master;
  387. }
  388. EXPORT_SYMBOL_GPL(spi_alloc_master);
  389. /**
  390. * spi_register_master - register SPI master controller
  391. * @master: initialized master, originally from spi_alloc_master()
  392. * Context: can sleep
  393. *
  394. * SPI master controllers connect to their drivers using some non-SPI bus,
  395. * such as the platform bus. The final stage of probe() in that code
  396. * includes calling spi_register_master() to hook up to this SPI bus glue.
  397. *
  398. * SPI controllers use board specific (often SOC specific) bus numbers,
  399. * and board-specific addressing for SPI devices combines those numbers
  400. * with chip select numbers. Since SPI does not directly support dynamic
  401. * device identification, boards need configuration tables telling which
  402. * chip is at which address.
  403. *
  404. * This must be called from context that can sleep. It returns zero on
  405. * success, else a negative error code (dropping the master's refcount).
  406. * After a successful return, the caller is responsible for calling
  407. * spi_unregister_master().
  408. */
  409. int spi_register_master(struct spi_master *master)
  410. {
  411. static atomic_t dyn_bus_id = ATOMIC_INIT((1<<15) - 1);
  412. struct device *dev = master->dev.parent;
  413. int status = -ENODEV;
  414. int dynamic = 0;
  415. if (!dev)
  416. return -ENODEV;
  417. /* even if it's just one always-selected device, there must
  418. * be at least one chipselect
  419. */
  420. if (master->num_chipselect == 0)
  421. return -EINVAL;
  422. /* convention: dynamically assigned bus IDs count down from the max */
  423. if (master->bus_num < 0) {
  424. /* FIXME switch to an IDR based scheme, something like
  425. * I2C now uses, so we can't run out of "dynamic" IDs
  426. */
  427. master->bus_num = atomic_dec_return(&dyn_bus_id);
  428. dynamic = 1;
  429. }
  430. /* register the device, then userspace will see it.
  431. * registration fails if the bus ID is in use.
  432. */
  433. snprintf(master->dev.bus_id, sizeof master->dev.bus_id,
  434. "spi%u", master->bus_num);
  435. status = device_add(&master->dev);
  436. if (status < 0)
  437. goto done;
  438. dev_dbg(dev, "registered master %s%s\n", master->dev.bus_id,
  439. dynamic ? " (dynamic)" : "");
  440. /* populate children from any spi device tables */
  441. scan_boardinfo(master);
  442. status = 0;
  443. done:
  444. return status;
  445. }
  446. EXPORT_SYMBOL_GPL(spi_register_master);
  447. static int __unregister(struct device *dev, void *master_dev)
  448. {
  449. /* note: before about 2.6.14-rc1 this would corrupt memory: */
  450. if (dev != master_dev)
  451. spi_unregister_device(to_spi_device(dev));
  452. return 0;
  453. }
  454. /**
  455. * spi_unregister_master - unregister SPI master controller
  456. * @master: the master being unregistered
  457. * Context: can sleep
  458. *
  459. * This call is used only by SPI master controller drivers, which are the
  460. * only ones directly touching chip registers.
  461. *
  462. * This must be called from context that can sleep.
  463. */
  464. void spi_unregister_master(struct spi_master *master)
  465. {
  466. int dummy;
  467. dummy = device_for_each_child(master->dev.parent, &master->dev,
  468. __unregister);
  469. device_unregister(&master->dev);
  470. }
  471. EXPORT_SYMBOL_GPL(spi_unregister_master);
  472. static int __spi_master_match(struct device *dev, void *data)
  473. {
  474. struct spi_master *m;
  475. u16 *bus_num = data;
  476. m = container_of(dev, struct spi_master, dev);
  477. return m->bus_num == *bus_num;
  478. }
  479. /**
  480. * spi_busnum_to_master - look up master associated with bus_num
  481. * @bus_num: the master's bus number
  482. * Context: can sleep
  483. *
  484. * This call may be used with devices that are registered after
  485. * arch init time. It returns a refcounted pointer to the relevant
  486. * spi_master (which the caller must release), or NULL if there is
  487. * no such master registered.
  488. */
  489. struct spi_master *spi_busnum_to_master(u16 bus_num)
  490. {
  491. struct device *dev;
  492. struct spi_master *master = NULL;
  493. dev = class_find_device(&spi_master_class, NULL, &bus_num,
  494. __spi_master_match);
  495. if (dev)
  496. master = container_of(dev, struct spi_master, dev);
  497. /* reference got in class_find_device */
  498. return master;
  499. }
  500. EXPORT_SYMBOL_GPL(spi_busnum_to_master);
  501. /*-------------------------------------------------------------------------*/
  502. static void spi_complete(void *arg)
  503. {
  504. complete(arg);
  505. }
  506. /**
  507. * spi_sync - blocking/synchronous SPI data transfers
  508. * @spi: device with which data will be exchanged
  509. * @message: describes the data transfers
  510. * Context: can sleep
  511. *
  512. * This call may only be used from a context that may sleep. The sleep
  513. * is non-interruptible, and has no timeout. Low-overhead controller
  514. * drivers may DMA directly into and out of the message buffers.
  515. *
  516. * Note that the SPI device's chip select is active during the message,
  517. * and then is normally disabled between messages. Drivers for some
  518. * frequently-used devices may want to minimize costs of selecting a chip,
  519. * by leaving it selected in anticipation that the next message will go
  520. * to the same chip. (That may increase power usage.)
  521. *
  522. * Also, the caller is guaranteeing that the memory associated with the
  523. * message will not be freed before this call returns.
  524. *
  525. * It returns zero on success, else a negative error code.
  526. */
  527. int spi_sync(struct spi_device *spi, struct spi_message *message)
  528. {
  529. DECLARE_COMPLETION_ONSTACK(done);
  530. int status;
  531. message->complete = spi_complete;
  532. message->context = &done;
  533. status = spi_async(spi, message);
  534. if (status == 0) {
  535. wait_for_completion(&done);
  536. status = message->status;
  537. }
  538. message->context = NULL;
  539. return status;
  540. }
  541. EXPORT_SYMBOL_GPL(spi_sync);
  542. /* portable code must never pass more than 32 bytes */
  543. #define SPI_BUFSIZ max(32,SMP_CACHE_BYTES)
  544. static u8 *buf;
  545. /**
  546. * spi_write_then_read - SPI synchronous write followed by read
  547. * @spi: device with which data will be exchanged
  548. * @txbuf: data to be written (need not be dma-safe)
  549. * @n_tx: size of txbuf, in bytes
  550. * @rxbuf: buffer into which data will be read
  551. * @n_rx: size of rxbuf, in bytes (need not be dma-safe)
  552. * Context: can sleep
  553. *
  554. * This performs a half duplex MicroWire style transaction with the
  555. * device, sending txbuf and then reading rxbuf. The return value
  556. * is zero for success, else a negative errno status code.
  557. * This call may only be used from a context that may sleep.
  558. *
  559. * Parameters to this routine are always copied using a small buffer;
  560. * portable code should never use this for more than 32 bytes.
  561. * Performance-sensitive or bulk transfer code should instead use
  562. * spi_{async,sync}() calls with dma-safe buffers.
  563. */
  564. int spi_write_then_read(struct spi_device *spi,
  565. const u8 *txbuf, unsigned n_tx,
  566. u8 *rxbuf, unsigned n_rx)
  567. {
  568. static DEFINE_MUTEX(lock);
  569. int status;
  570. struct spi_message message;
  571. struct spi_transfer x[2];
  572. u8 *local_buf;
  573. /* Use preallocated DMA-safe buffer. We can't avoid copying here,
  574. * (as a pure convenience thing), but we can keep heap costs
  575. * out of the hot path ...
  576. */
  577. if ((n_tx + n_rx) > SPI_BUFSIZ)
  578. return -EINVAL;
  579. spi_message_init(&message);
  580. memset(x, 0, sizeof x);
  581. if (n_tx) {
  582. x[0].len = n_tx;
  583. spi_message_add_tail(&x[0], &message);
  584. }
  585. if (n_rx) {
  586. x[1].len = n_rx;
  587. spi_message_add_tail(&x[1], &message);
  588. }
  589. /* ... unless someone else is using the pre-allocated buffer */
  590. if (!mutex_trylock(&lock)) {
  591. local_buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL);
  592. if (!local_buf)
  593. return -ENOMEM;
  594. } else
  595. local_buf = buf;
  596. memcpy(local_buf, txbuf, n_tx);
  597. x[0].tx_buf = local_buf;
  598. x[1].rx_buf = local_buf + n_tx;
  599. /* do the i/o */
  600. status = spi_sync(spi, &message);
  601. if (status == 0)
  602. memcpy(rxbuf, x[1].rx_buf, n_rx);
  603. if (x[0].tx_buf == buf)
  604. mutex_unlock(&lock);
  605. else
  606. kfree(local_buf);
  607. return status;
  608. }
  609. EXPORT_SYMBOL_GPL(spi_write_then_read);
  610. /*-------------------------------------------------------------------------*/
  611. static int __init spi_init(void)
  612. {
  613. int status;
  614. buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL);
  615. if (!buf) {
  616. status = -ENOMEM;
  617. goto err0;
  618. }
  619. status = bus_register(&spi_bus_type);
  620. if (status < 0)
  621. goto err1;
  622. status = class_register(&spi_master_class);
  623. if (status < 0)
  624. goto err2;
  625. return 0;
  626. err2:
  627. bus_unregister(&spi_bus_type);
  628. err1:
  629. kfree(buf);
  630. buf = NULL;
  631. err0:
  632. return status;
  633. }
  634. /* board_info is normally registered in arch_initcall(),
  635. * but even essential drivers wait till later
  636. *
  637. * REVISIT only boardinfo really needs static linking. the rest (device and
  638. * driver registration) _could_ be dynamically linked (modular) ... costs
  639. * include needing to have boardinfo data structures be much more public.
  640. */
  641. subsys_initcall(spi_init);