Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/spi-2.6

+4910
+57
Documentation/spi/butterfly
···
··· 1 + spi_butterfly - parport-to-butterfly adapter driver 2 + =================================================== 3 + 4 + This is a hardware and software project that includes building and using 5 + a parallel port adapter cable, together with an "AVR Butterfly" to run 6 + firmware for user interfacing and/or sensors. A Butterfly is a $US20 7 + battery powered card with an AVR microcontroller and lots of goodies: 8 + sensors, LCD, flash, toggle stick, and more. You can use AVR-GCC to 9 + develop firmware for this, and flash it using this adapter cable. 10 + 11 + You can make this adapter from an old printer cable and solder things 12 + directly to the Butterfly. Or (if you have the parts and skills) you 13 + can come up with something fancier, providing ciruit protection to the 14 + Butterfly and the printer port, or with a better power supply than two 15 + signal pins from the printer port. 16 + 17 + 18 + The first cable connections will hook Linux up to one SPI bus, with the 19 + AVR and a DataFlash chip; and to the AVR reset line. This is all you 20 + need to reflash the firmware, and the pins are the standard Atmel "ISP" 21 + connector pins (used also on non-Butterfly AVR boards). 22 + 23 + Signal Butterfly Parport (DB-25) 24 + ------ --------- --------------- 25 + SCK = J403.PB1/SCK = pin 2/D0 26 + RESET = J403.nRST = pin 3/D1 27 + VCC = J403.VCC_EXT = pin 8/D6 28 + MOSI = J403.PB2/MOSI = pin 9/D7 29 + MISO = J403.PB3/MISO = pin 11/S7,nBUSY 30 + GND = J403.GND = pin 23/GND 31 + 32 + Then to let Linux master that bus to talk to the DataFlash chip, you must 33 + (a) flash new firmware that disables SPI (set PRR.2, and disable pullups 34 + by clearing PORTB.[0-3]); (b) configure the mtd_dataflash driver; and 35 + (c) cable in the chipselect. 36 + 37 + Signal Butterfly Parport (DB-25) 38 + ------ --------- --------------- 39 + VCC = J400.VCC_EXT = pin 7/D5 40 + SELECT = J400.PB0/nSS = pin 17/C3,nSELECT 41 + GND = J400.GND = pin 24/GND 42 + 43 + The "USI" controller, using J405, can be used for a second SPI bus. That 44 + would let you talk to the AVR over SPI, running firmware that makes it act 45 + as an SPI slave, while letting either Linux or the AVR use the DataFlash. 46 + There are plenty of spare parport pins to wire this one up, such as: 47 + 48 + Signal Butterfly Parport (DB-25) 49 + ------ --------- --------------- 50 + SCK = J403.PE4/USCK = pin 5/D3 51 + MOSI = J403.PE5/DI = pin 6/D4 52 + MISO = J403.PE6/DO = pin 12/S5,nPAPEROUT 53 + GND = J403.GND = pin 22/GND 54 + 55 + IRQ = J402.PF4 = pin 10/S6,ACK 56 + GND = J402.GND(P2) = pin 25/GND 57 +
+457
Documentation/spi/spi-summary
···
··· 1 + Overview of Linux kernel SPI support 2 + ==================================== 3 + 4 + 02-Dec-2005 5 + 6 + What is SPI? 7 + ------------ 8 + The "Serial Peripheral Interface" (SPI) is a synchronous four wire serial 9 + link used to connect microcontrollers to sensors, memory, and peripherals. 10 + 11 + The three signal wires hold a clock (SCLK, often on the order of 10 MHz), 12 + and parallel data lines with "Master Out, Slave In" (MOSI) or "Master In, 13 + Slave Out" (MISO) signals. (Other names are also used.) There are four 14 + clocking modes through which data is exchanged; mode-0 and mode-3 are most 15 + commonly used. Each clock cycle shifts data out and data in; the clock 16 + doesn't cycle except when there is data to shift. 17 + 18 + SPI masters may use a "chip select" line to activate a given SPI slave 19 + device, so those three signal wires may be connected to several chips 20 + in parallel. All SPI slaves support chipselects. Some devices have 21 + other signals, often including an interrupt to the master. 22 + 23 + Unlike serial busses like USB or SMBUS, even low level protocols for 24 + SPI slave functions are usually not interoperable between vendors 25 + (except for cases like SPI memory chips). 26 + 27 + - SPI may be used for request/response style device protocols, as with 28 + touchscreen sensors and memory chips. 29 + 30 + - It may also be used to stream data in either direction (half duplex), 31 + or both of them at the same time (full duplex). 32 + 33 + - Some devices may use eight bit words. Others may different word 34 + lengths, such as streams of 12-bit or 20-bit digital samples. 35 + 36 + In the same way, SPI slaves will only rarely support any kind of automatic 37 + discovery/enumeration protocol. The tree of slave devices accessible from 38 + a given SPI master will normally be set up manually, with configuration 39 + tables. 40 + 41 + SPI is only one of the names used by such four-wire protocols, and 42 + most controllers have no problem handling "MicroWire" (think of it as 43 + half-duplex SPI, for request/response protocols), SSP ("Synchronous 44 + Serial Protocol"), PSP ("Programmable Serial Protocol"), and other 45 + related protocols. 46 + 47 + Microcontrollers often support both master and slave sides of the SPI 48 + protocol. This document (and Linux) currently only supports the master 49 + side of SPI interactions. 50 + 51 + 52 + Who uses it? On what kinds of systems? 53 + --------------------------------------- 54 + Linux developers using SPI are probably writing device drivers for embedded 55 + systems boards. SPI is used to control external chips, and it is also a 56 + protocol supported by every MMC or SD memory card. (The older "DataFlash" 57 + cards, predating MMC cards but using the same connectors and card shape, 58 + support only SPI.) Some PC hardware uses SPI flash for BIOS code. 59 + 60 + SPI slave chips range from digital/analog converters used for analog 61 + sensors and codecs, to memory, to peripherals like USB controllers 62 + or Ethernet adapters; and more. 63 + 64 + Most systems using SPI will integrate a few devices on a mainboard. 65 + Some provide SPI links on expansion connectors; in cases where no 66 + dedicated SPI controller exists, GPIO pins can be used to create a 67 + low speed "bitbanging" adapter. Very few systems will "hotplug" an SPI 68 + controller; the reasons to use SPI focus on low cost and simple operation, 69 + and if dynamic reconfiguration is important, USB will often be a more 70 + appropriate low-pincount peripheral bus. 71 + 72 + Many microcontrollers that can run Linux integrate one or more I/O 73 + interfaces with SPI modes. Given SPI support, they could use MMC or SD 74 + cards without needing a special purpose MMC/SD/SDIO controller. 75 + 76 + 77 + How do these driver programming interfaces work? 78 + ------------------------------------------------ 79 + The <linux/spi/spi.h> header file includes kerneldoc, as does the 80 + main source code, and you should certainly read that. This is just 81 + an overview, so you get the big picture before the details. 82 + 83 + SPI requests always go into I/O queues. Requests for a given SPI device 84 + are always executed in FIFO order, and complete asynchronously through 85 + completion callbacks. There are also some simple synchronous wrappers 86 + for those calls, including ones for common transaction types like writing 87 + a command and then reading its response. 88 + 89 + There are two types of SPI driver, here called: 90 + 91 + Controller drivers ... these are often built in to System-On-Chip 92 + processors, and often support both Master and Slave roles. 93 + These drivers touch hardware registers and may use DMA. 94 + Or they can be PIO bitbangers, needing just GPIO pins. 95 + 96 + Protocol drivers ... these pass messages through the controller 97 + driver to communicate with a Slave or Master device on the 98 + other side of an SPI link. 99 + 100 + So for example one protocol driver might talk to the MTD layer to export 101 + data to filesystems stored on SPI flash like DataFlash; and others might 102 + control audio interfaces, present touchscreen sensors as input interfaces, 103 + or monitor temperature and voltage levels during industrial processing. 104 + And those might all be sharing the same controller driver. 105 + 106 + A "struct spi_device" encapsulates the master-side interface between 107 + those two types of driver. At this writing, Linux has no slave side 108 + programming interface. 109 + 110 + There is a minimal core of SPI programming interfaces, focussing on 111 + using driver model to connect controller and protocol drivers using 112 + device tables provided by board specific initialization code. SPI 113 + shows up in sysfs in several locations: 114 + 115 + /sys/devices/.../CTLR/spiB.C ... spi_device for on bus "B", 116 + chipselect C, accessed through CTLR. 117 + 118 + /sys/devices/.../CTLR/spiB.C/modalias ... identifies the driver 119 + that should be used with this device (for hotplug/coldplug) 120 + 121 + /sys/bus/spi/devices/spiB.C ... symlink to the physical 122 + spiB-C device 123 + 124 + /sys/bus/spi/drivers/D ... driver for one or more spi*.* devices 125 + 126 + /sys/class/spi_master/spiB ... class device for the controller 127 + managing bus "B". All the spiB.* devices share the same 128 + physical SPI bus segment, with SCLK, MOSI, and MISO. 129 + 130 + 131 + How does board-specific init code declare SPI devices? 132 + ------------------------------------------------------ 133 + Linux needs several kinds of information to properly configure SPI devices. 134 + That information is normally provided by board-specific code, even for 135 + chips that do support some of automated discovery/enumeration. 136 + 137 + DECLARE CONTROLLERS 138 + 139 + The first kind of information is a list of what SPI controllers exist. 140 + For System-on-Chip (SOC) based boards, these will usually be platform 141 + devices, and the controller may need some platform_data in order to 142 + operate properly. The "struct platform_device" will include resources 143 + like the physical address of the controller's first register and its IRQ. 144 + 145 + Platforms will often abstract the "register SPI controller" operation, 146 + maybe coupling it with code to initialize pin configurations, so that 147 + the arch/.../mach-*/board-*.c files for several boards can all share the 148 + same basic controller setup code. This is because most SOCs have several 149 + SPI-capable controllers, and only the ones actually usable on a given 150 + board should normally be set up and registered. 151 + 152 + So for example arch/.../mach-*/board-*.c files might have code like: 153 + 154 + #include <asm/arch/spi.h> /* for mysoc_spi_data */ 155 + 156 + /* if your mach-* infrastructure doesn't support kernels that can 157 + * run on multiple boards, pdata wouldn't benefit from "__init". 158 + */ 159 + static struct mysoc_spi_data __init pdata = { ... }; 160 + 161 + static __init board_init(void) 162 + { 163 + ... 164 + /* this board only uses SPI controller #2 */ 165 + mysoc_register_spi(2, &pdata); 166 + ... 167 + } 168 + 169 + And SOC-specific utility code might look something like: 170 + 171 + #include <asm/arch/spi.h> 172 + 173 + static struct platform_device spi2 = { ... }; 174 + 175 + void mysoc_register_spi(unsigned n, struct mysoc_spi_data *pdata) 176 + { 177 + struct mysoc_spi_data *pdata2; 178 + 179 + pdata2 = kmalloc(sizeof *pdata2, GFP_KERNEL); 180 + *pdata2 = pdata; 181 + ... 182 + if (n == 2) { 183 + spi2->dev.platform_data = pdata2; 184 + register_platform_device(&spi2); 185 + 186 + /* also: set up pin modes so the spi2 signals are 187 + * visible on the relevant pins ... bootloaders on 188 + * production boards may already have done this, but 189 + * developer boards will often need Linux to do it. 190 + */ 191 + } 192 + ... 193 + } 194 + 195 + Notice how the platform_data for boards may be different, even if the 196 + same SOC controller is used. For example, on one board SPI might use 197 + an external clock, where another derives the SPI clock from current 198 + settings of some master clock. 199 + 200 + 201 + DECLARE SLAVE DEVICES 202 + 203 + The second kind of information is a list of what SPI slave devices exist 204 + on the target board, often with some board-specific data needed for the 205 + driver to work correctly. 206 + 207 + Normally your arch/.../mach-*/board-*.c files would provide a small table 208 + listing the SPI devices on each board. (This would typically be only a 209 + small handful.) That might look like: 210 + 211 + static struct ads7846_platform_data ads_info = { 212 + .vref_delay_usecs = 100, 213 + .x_plate_ohms = 580, 214 + .y_plate_ohms = 410, 215 + }; 216 + 217 + static struct spi_board_info spi_board_info[] __initdata = { 218 + { 219 + .modalias = "ads7846", 220 + .platform_data = &ads_info, 221 + .mode = SPI_MODE_0, 222 + .irq = GPIO_IRQ(31), 223 + .max_speed_hz = 120000 /* max sample rate at 3V */ * 16, 224 + .bus_num = 1, 225 + .chip_select = 0, 226 + }, 227 + }; 228 + 229 + Again, notice how board-specific information is provided; each chip may need 230 + several types. This example shows generic constraints like the fastest SPI 231 + clock to allow (a function of board voltage in this case) or how an IRQ pin 232 + is wired, plus chip-specific constraints like an important delay that's 233 + changed by the capacitance at one pin. 234 + 235 + (There's also "controller_data", information that may be useful to the 236 + controller driver. An example would be peripheral-specific DMA tuning 237 + data or chipselect callbacks. This is stored in spi_device later.) 238 + 239 + The board_info should provide enough information to let the system work 240 + without the chip's driver being loaded. The most troublesome aspect of 241 + that is likely the SPI_CS_HIGH bit in the spi_device.mode field, since 242 + sharing a bus with a device that interprets chipselect "backwards" is 243 + not possible. 244 + 245 + Then your board initialization code would register that table with the SPI 246 + infrastructure, so that it's available later when the SPI master controller 247 + driver is registered: 248 + 249 + spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); 250 + 251 + Like with other static board-specific setup, you won't unregister those. 252 + 253 + The widely used "card" style computers bundle memory, cpu, and little else 254 + onto a card that's maybe just thirty square centimeters. On such systems, 255 + your arch/.../mach-.../board-*.c file would primarily provide information 256 + about the devices on the mainboard into which such a card is plugged. That 257 + certainly includes SPI devices hooked up through the card connectors! 258 + 259 + 260 + NON-STATIC CONFIGURATIONS 261 + 262 + Developer boards often play by different rules than product boards, and one 263 + example is the potential need to hotplug SPI devices and/or controllers. 264 + 265 + For those cases you might need to use use spi_busnum_to_master() to look 266 + up the spi bus master, and will likely need spi_new_device() to provide the 267 + board info based on the board that was hotplugged. Of course, you'd later 268 + call at least spi_unregister_device() when that board is removed. 269 + 270 + When Linux includes support for MMC/SD/SDIO/DataFlash cards through SPI, those 271 + configurations will also be dynamic. Fortunately, those devices all support 272 + basic device identification probes, so that support should hotplug normally. 273 + 274 + 275 + How do I write an "SPI Protocol Driver"? 276 + ---------------------------------------- 277 + All SPI drivers are currently kernel drivers. A userspace driver API 278 + would just be another kernel driver, probably offering some lowlevel 279 + access through aio_read(), aio_write(), and ioctl() calls and using the 280 + standard userspace sysfs mechanisms to bind to a given SPI device. 281 + 282 + SPI protocol drivers somewhat resemble platform device drivers: 283 + 284 + static struct spi_driver CHIP_driver = { 285 + .driver = { 286 + .name = "CHIP", 287 + .bus = &spi_bus_type, 288 + .owner = THIS_MODULE, 289 + }, 290 + 291 + .probe = CHIP_probe, 292 + .remove = __devexit_p(CHIP_remove), 293 + .suspend = CHIP_suspend, 294 + .resume = CHIP_resume, 295 + }; 296 + 297 + The driver core will autmatically attempt to bind this driver to any SPI 298 + device whose board_info gave a modalias of "CHIP". Your probe() code 299 + might look like this unless you're creating a class_device: 300 + 301 + static int __devinit CHIP_probe(struct spi_device *spi) 302 + { 303 + struct CHIP *chip; 304 + struct CHIP_platform_data *pdata; 305 + 306 + /* assuming the driver requires board-specific data: */ 307 + pdata = &spi->dev.platform_data; 308 + if (!pdata) 309 + return -ENODEV; 310 + 311 + /* get memory for driver's per-chip state */ 312 + chip = kzalloc(sizeof *chip, GFP_KERNEL); 313 + if (!chip) 314 + return -ENOMEM; 315 + dev_set_drvdata(&spi->dev, chip); 316 + 317 + ... etc 318 + return 0; 319 + } 320 + 321 + As soon as it enters probe(), the driver may issue I/O requests to 322 + the SPI device using "struct spi_message". When remove() returns, 323 + the driver guarantees that it won't submit any more such messages. 324 + 325 + - An spi_message is a sequence of of protocol operations, executed 326 + as one atomic sequence. SPI driver controls include: 327 + 328 + + when bidirectional reads and writes start ... by how its 329 + sequence of spi_transfer requests is arranged; 330 + 331 + + optionally defining short delays after transfers ... using 332 + the spi_transfer.delay_usecs setting; 333 + 334 + + whether the chipselect becomes inactive after a transfer and 335 + any delay ... by using the spi_transfer.cs_change flag; 336 + 337 + + hinting whether the next message is likely to go to this same 338 + device ... using the spi_transfer.cs_change flag on the last 339 + transfer in that atomic group, and potentially saving costs 340 + for chip deselect and select operations. 341 + 342 + - Follow standard kernel rules, and provide DMA-safe buffers in 343 + your messages. That way controller drivers using DMA aren't forced 344 + to make extra copies unless the hardware requires it (e.g. working 345 + around hardware errata that force the use of bounce buffering). 346 + 347 + If standard dma_map_single() handling of these buffers is inappropriate, 348 + you can use spi_message.is_dma_mapped to tell the controller driver 349 + that you've already provided the relevant DMA addresses. 350 + 351 + - The basic I/O primitive is spi_async(). Async requests may be 352 + issued in any context (irq handler, task, etc) and completion 353 + is reported using a callback provided with the message. 354 + After any detected error, the chip is deselected and processing 355 + of that spi_message is aborted. 356 + 357 + - There are also synchronous wrappers like spi_sync(), and wrappers 358 + like spi_read(), spi_write(), and spi_write_then_read(). These 359 + may be issued only in contexts that may sleep, and they're all 360 + clean (and small, and "optional") layers over spi_async(). 361 + 362 + - The spi_write_then_read() call, and convenience wrappers around 363 + it, should only be used with small amounts of data where the 364 + cost of an extra copy may be ignored. It's designed to support 365 + common RPC-style requests, such as writing an eight bit command 366 + and reading a sixteen bit response -- spi_w8r16() being one its 367 + wrappers, doing exactly that. 368 + 369 + Some drivers may need to modify spi_device characteristics like the 370 + transfer mode, wordsize, or clock rate. This is done with spi_setup(), 371 + which would normally be called from probe() before the first I/O is 372 + done to the device. 373 + 374 + While "spi_device" would be the bottom boundary of the driver, the 375 + upper boundaries might include sysfs (especially for sensor readings), 376 + the input layer, ALSA, networking, MTD, the character device framework, 377 + or other Linux subsystems. 378 + 379 + Note that there are two types of memory your driver must manage as part 380 + of interacting with SPI devices. 381 + 382 + - I/O buffers use the usual Linux rules, and must be DMA-safe. 383 + You'd normally allocate them from the heap or free page pool. 384 + Don't use the stack, or anything that's declared "static". 385 + 386 + - The spi_message and spi_transfer metadata used to glue those 387 + I/O buffers into a group of protocol transactions. These can 388 + be allocated anywhere it's convenient, including as part of 389 + other allocate-once driver data structures. Zero-init these. 390 + 391 + If you like, spi_message_alloc() and spi_message_free() convenience 392 + routines are available to allocate and zero-initialize an spi_message 393 + with several transfers. 394 + 395 + 396 + How do I write an "SPI Master Controller Driver"? 397 + ------------------------------------------------- 398 + An SPI controller will probably be registered on the platform_bus; write 399 + a driver to bind to the device, whichever bus is involved. 400 + 401 + The main task of this type of driver is to provide an "spi_master". 402 + Use spi_alloc_master() to allocate the master, and class_get_devdata() 403 + to get the driver-private data allocated for that device. 404 + 405 + struct spi_master *master; 406 + struct CONTROLLER *c; 407 + 408 + master = spi_alloc_master(dev, sizeof *c); 409 + if (!master) 410 + return -ENODEV; 411 + 412 + c = class_get_devdata(&master->cdev); 413 + 414 + The driver will initialize the fields of that spi_master, including the 415 + bus number (maybe the same as the platform device ID) and three methods 416 + used to interact with the SPI core and SPI protocol drivers. It will 417 + also initialize its own internal state. 418 + 419 + master->setup(struct spi_device *spi) 420 + This sets up the device clock rate, SPI mode, and word sizes. 421 + Drivers may change the defaults provided by board_info, and then 422 + call spi_setup(spi) to invoke this routine. It may sleep. 423 + 424 + master->transfer(struct spi_device *spi, struct spi_message *message) 425 + This must not sleep. Its responsibility is arrange that the 426 + transfer happens and its complete() callback is issued; the two 427 + will normally happen later, after other transfers complete. 428 + 429 + master->cleanup(struct spi_device *spi) 430 + Your controller driver may use spi_device.controller_state to hold 431 + state it dynamically associates with that device. If you do that, 432 + be sure to provide the cleanup() method to free that state. 433 + 434 + The bulk of the driver will be managing the I/O queue fed by transfer(). 435 + 436 + That queue could be purely conceptual. For example, a driver used only 437 + for low-frequency sensor acess might be fine using synchronous PIO. 438 + 439 + But the queue will probably be very real, using message->queue, PIO, 440 + often DMA (especially if the root filesystem is in SPI flash), and 441 + execution contexts like IRQ handlers, tasklets, or workqueues (such 442 + as keventd). Your driver can be as fancy, or as simple, as you need. 443 + 444 + 445 + THANKS TO 446 + --------- 447 + Contributors to Linux-SPI discussions include (in alphabetical order, 448 + by last name): 449 + 450 + David Brownell 451 + Russell King 452 + Dmitry Pervushin 453 + Stephen Street 454 + Mark Underwood 455 + Andrew Victor 456 + Vitaly Wool 457 +
+2
arch/arm/Kconfig
··· 729 730 source "drivers/i2c/Kconfig" 731 732 source "drivers/hwmon/Kconfig" 733 734 #source "drivers/l3/Kconfig"
··· 729 730 source "drivers/i2c/Kconfig" 731 732 + source "drivers/spi/Kconfig" 733 + 734 source "drivers/hwmon/Kconfig" 735 736 #source "drivers/l3/Kconfig"
+2
drivers/Kconfig
··· 44 45 source "drivers/i2c/Kconfig" 46 47 source "drivers/w1/Kconfig" 48 49 source "drivers/hwmon/Kconfig"
··· 44 45 source "drivers/i2c/Kconfig" 46 47 + source "drivers/spi/Kconfig" 48 + 49 source "drivers/w1/Kconfig" 50 51 source "drivers/hwmon/Kconfig"
+1
drivers/Makefile
··· 41 obj-$(CONFIG_IEEE1394) += ieee1394/ 42 obj-y += cdrom/ 43 obj-$(CONFIG_MTD) += mtd/ 44 obj-$(CONFIG_PCCARD) += pcmcia/ 45 obj-$(CONFIG_DIO) += dio/ 46 obj-$(CONFIG_SBUS) += sbus/
··· 41 obj-$(CONFIG_IEEE1394) += ieee1394/ 42 obj-y += cdrom/ 43 obj-$(CONFIG_MTD) += mtd/ 44 + obj-$(CONFIG_SPI) += spi/ 45 obj-$(CONFIG_PCCARD) += pcmcia/ 46 obj-$(CONFIG_DIO) += dio/ 47 obj-$(CONFIG_SBUS) += sbus/
+13
drivers/input/touchscreen/Kconfig
··· 11 12 if INPUT_TOUCHSCREEN 13 14 config TOUCHSCREEN_BITSY 15 tristate "Compaq iPAQ H3600 (Bitsy) touchscreen" 16 depends on SA1100_BITSY
··· 11 12 if INPUT_TOUCHSCREEN 13 14 + config TOUCHSCREEN_ADS7846 15 + tristate "ADS 7846 based touchscreens" 16 + depends on SPI_MASTER 17 + help 18 + Say Y here if you have a touchscreen interface using the 19 + ADS7846 controller, and your board-specific initialization 20 + code includes that in its table of SPI devices. 21 + 22 + If unsure, say N (but it's safe to say "Y"). 23 + 24 + To compile this driver as a module, choose M here: the 25 + module will be called ads7846. 26 + 27 config TOUCHSCREEN_BITSY 28 tristate "Compaq iPAQ H3600 (Bitsy) touchscreen" 29 depends on SA1100_BITSY
+1
drivers/input/touchscreen/Makefile
··· 4 5 # Each configuration option enables a list of files. 6 7 obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o 8 obj-$(CONFIG_TOUCHSCREEN_CORGI) += corgi_ts.o 9 obj-$(CONFIG_TOUCHSCREEN_GUNZE) += gunze.o
··· 4 5 # Each configuration option enables a list of files. 6 7 + obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o 8 obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o 9 obj-$(CONFIG_TOUCHSCREEN_CORGI) += corgi_ts.o 10 obj-$(CONFIG_TOUCHSCREEN_GUNZE) += gunze.o
+625
drivers/input/touchscreen/ads7846.c
···
··· 1 + /* 2 + * ADS7846 based touchscreen and sensor driver 3 + * 4 + * Copyright (c) 2005 David Brownell 5 + * 6 + * Using code from: 7 + * - corgi_ts.c 8 + * Copyright (C) 2004-2005 Richard Purdie 9 + * - omap_ts.[hc], ads7846.h, ts_osk.c 10 + * Copyright (C) 2002 MontaVista Software 11 + * Copyright (C) 2004 Texas Instruments 12 + * Copyright (C) 2005 Dirk Behme 13 + * 14 + * This program is free software; you can redistribute it and/or modify 15 + * it under the terms of the GNU General Public License version 2 as 16 + * published by the Free Software Foundation. 17 + */ 18 + #include <linux/device.h> 19 + #include <linux/init.h> 20 + #include <linux/delay.h> 21 + #include <linux/input.h> 22 + #include <linux/interrupt.h> 23 + #include <linux/slab.h> 24 + #include <linux/spi/spi.h> 25 + #include <linux/spi/ads7846.h> 26 + 27 + #ifdef CONFIG_ARM 28 + #include <asm/mach-types.h> 29 + #ifdef CONFIG_ARCH_OMAP 30 + #include <asm/arch/gpio.h> 31 + #endif 32 + 33 + #else 34 + #define set_irq_type(irq,type) do{}while(0) 35 + #endif 36 + 37 + 38 + /* 39 + * This code has been lightly tested on an ads7846. 40 + * Support for ads7843 and ads7845 has only been stubbed in. 41 + * 42 + * Not yet done: investigate the values reported. Are x/y/pressure 43 + * event values sane enough for X11? How accurate are the temperature 44 + * and voltage readings? (System-specific calibration should support 45 + * accuracy of 0.3 degrees C; otherwise it's 2.0 degrees.) 46 + * 47 + * app note sbaa036 talks in more detail about accurate sampling... 48 + * that ought to help in situations like LCDs inducing noise (which 49 + * can also be helped by using synch signals) and more generally. 50 + */ 51 + 52 + #define TS_POLL_PERIOD msecs_to_jiffies(10) 53 + 54 + struct ts_event { 55 + /* For portability, we can't read 12 bit values using SPI (which 56 + * would make the controller deliver them as native byteorder u16 57 + * with msbs zeroed). Instead, we read them as two 8-byte values, 58 + * which need byteswapping then range adjustment. 59 + */ 60 + __be16 x; 61 + __be16 y; 62 + __be16 z1, z2; 63 + }; 64 + 65 + struct ads7846 { 66 + struct input_dev input; 67 + char phys[32]; 68 + 69 + struct spi_device *spi; 70 + u16 model; 71 + u16 vref_delay_usecs; 72 + u16 x_plate_ohms; 73 + 74 + struct ts_event tc; 75 + 76 + struct spi_transfer xfer[8]; 77 + struct spi_message msg; 78 + 79 + spinlock_t lock; 80 + struct timer_list timer; /* P: lock */ 81 + unsigned pendown:1; /* P: lock */ 82 + unsigned pending:1; /* P: lock */ 83 + // FIXME remove "irq_disabled" 84 + unsigned irq_disabled:1; /* P: lock */ 85 + }; 86 + 87 + /* leave chip selected when we're done, for quicker re-select? */ 88 + #if 0 89 + #define CS_CHANGE(xfer) ((xfer).cs_change = 1) 90 + #else 91 + #define CS_CHANGE(xfer) ((xfer).cs_change = 0) 92 + #endif 93 + 94 + /*--------------------------------------------------------------------------*/ 95 + 96 + /* The ADS7846 has touchscreen and other sensors. 97 + * Earlier ads784x chips are somewhat compatible. 98 + */ 99 + #define ADS_START (1 << 7) 100 + #define ADS_A2A1A0_d_y (1 << 4) /* differential */ 101 + #define ADS_A2A1A0_d_z1 (3 << 4) /* differential */ 102 + #define ADS_A2A1A0_d_z2 (4 << 4) /* differential */ 103 + #define ADS_A2A1A0_d_x (5 << 4) /* differential */ 104 + #define ADS_A2A1A0_temp0 (0 << 4) /* non-differential */ 105 + #define ADS_A2A1A0_vbatt (2 << 4) /* non-differential */ 106 + #define ADS_A2A1A0_vaux (6 << 4) /* non-differential */ 107 + #define ADS_A2A1A0_temp1 (7 << 4) /* non-differential */ 108 + #define ADS_8_BIT (1 << 3) 109 + #define ADS_12_BIT (0 << 3) 110 + #define ADS_SER (1 << 2) /* non-differential */ 111 + #define ADS_DFR (0 << 2) /* differential */ 112 + #define ADS_PD10_PDOWN (0 << 0) /* lowpower mode + penirq */ 113 + #define ADS_PD10_ADC_ON (1 << 0) /* ADC on */ 114 + #define ADS_PD10_REF_ON (2 << 0) /* vREF on + penirq */ 115 + #define ADS_PD10_ALL_ON (3 << 0) /* ADC + vREF on */ 116 + 117 + #define MAX_12BIT ((1<<12)-1) 118 + 119 + /* leave ADC powered up (disables penirq) between differential samples */ 120 + #define READ_12BIT_DFR(x) (ADS_START | ADS_A2A1A0_d_ ## x \ 121 + | ADS_12_BIT | ADS_DFR) 122 + 123 + static const u8 read_y = READ_12BIT_DFR(y) | ADS_PD10_ADC_ON; 124 + static const u8 read_z1 = READ_12BIT_DFR(z1) | ADS_PD10_ADC_ON; 125 + static const u8 read_z2 = READ_12BIT_DFR(z2) | ADS_PD10_ADC_ON; 126 + static const u8 read_x = READ_12BIT_DFR(x) | ADS_PD10_PDOWN; /* LAST */ 127 + 128 + /* single-ended samples need to first power up reference voltage; 129 + * we leave both ADC and VREF powered 130 + */ 131 + #define READ_12BIT_SER(x) (ADS_START | ADS_A2A1A0_ ## x \ 132 + | ADS_12_BIT | ADS_SER) 133 + 134 + static const u8 ref_on = READ_12BIT_DFR(x) | ADS_PD10_ALL_ON; 135 + static const u8 ref_off = READ_12BIT_DFR(y) | ADS_PD10_PDOWN; 136 + 137 + /*--------------------------------------------------------------------------*/ 138 + 139 + /* 140 + * Non-touchscreen sensors only use single-ended conversions. 141 + */ 142 + 143 + struct ser_req { 144 + u8 command; 145 + u16 scratch; 146 + __be16 sample; 147 + struct spi_message msg; 148 + struct spi_transfer xfer[6]; 149 + }; 150 + 151 + static int ads7846_read12_ser(struct device *dev, unsigned command) 152 + { 153 + struct spi_device *spi = to_spi_device(dev); 154 + struct ads7846 *ts = dev_get_drvdata(dev); 155 + struct ser_req *req = kzalloc(sizeof *req, SLAB_KERNEL); 156 + int status; 157 + int sample; 158 + int i; 159 + 160 + if (!req) 161 + return -ENOMEM; 162 + 163 + INIT_LIST_HEAD(&req->msg.transfers); 164 + 165 + /* activate reference, so it has time to settle; */ 166 + req->xfer[0].tx_buf = &ref_on; 167 + req->xfer[0].len = 1; 168 + req->xfer[1].rx_buf = &req->scratch; 169 + req->xfer[1].len = 2; 170 + 171 + /* 172 + * for external VREF, 0 usec (and assume it's always on); 173 + * for 1uF, use 800 usec; 174 + * no cap, 100 usec. 175 + */ 176 + req->xfer[1].delay_usecs = ts->vref_delay_usecs; 177 + 178 + /* take sample */ 179 + req->command = (u8) command; 180 + req->xfer[2].tx_buf = &req->command; 181 + req->xfer[2].len = 1; 182 + req->xfer[3].rx_buf = &req->sample; 183 + req->xfer[3].len = 2; 184 + 185 + /* REVISIT: take a few more samples, and compare ... */ 186 + 187 + /* turn off reference */ 188 + req->xfer[4].tx_buf = &ref_off; 189 + req->xfer[4].len = 1; 190 + req->xfer[5].rx_buf = &req->scratch; 191 + req->xfer[5].len = 2; 192 + 193 + CS_CHANGE(req->xfer[5]); 194 + 195 + /* group all the transfers together, so we can't interfere with 196 + * reading touchscreen state; disable penirq while sampling 197 + */ 198 + for (i = 0; i < 6; i++) 199 + spi_message_add_tail(&req->xfer[i], &req->msg); 200 + 201 + disable_irq(spi->irq); 202 + status = spi_sync(spi, &req->msg); 203 + enable_irq(spi->irq); 204 + 205 + if (req->msg.status) 206 + status = req->msg.status; 207 + sample = be16_to_cpu(req->sample); 208 + sample = sample >> 4; 209 + kfree(req); 210 + 211 + return status ? status : sample; 212 + } 213 + 214 + #define SHOW(name) static ssize_t \ 215 + name ## _show(struct device *dev, struct device_attribute *attr, char *buf) \ 216 + { \ 217 + ssize_t v = ads7846_read12_ser(dev, \ 218 + READ_12BIT_SER(name) | ADS_PD10_ALL_ON); \ 219 + if (v < 0) \ 220 + return v; \ 221 + return sprintf(buf, "%u\n", (unsigned) v); \ 222 + } \ 223 + static DEVICE_ATTR(name, S_IRUGO, name ## _show, NULL); 224 + 225 + SHOW(temp0) 226 + SHOW(temp1) 227 + SHOW(vaux) 228 + SHOW(vbatt) 229 + 230 + /*--------------------------------------------------------------------------*/ 231 + 232 + /* 233 + * PENIRQ only kicks the timer. The timer only reissues the SPI transfer, 234 + * to retrieve touchscreen status. 235 + * 236 + * The SPI transfer completion callback does the real work. It reports 237 + * touchscreen events and reactivates the timer (or IRQ) as appropriate. 238 + */ 239 + 240 + static void ads7846_rx(void *ads) 241 + { 242 + struct ads7846 *ts = ads; 243 + unsigned Rt; 244 + unsigned sync = 0; 245 + u16 x, y, z1, z2; 246 + unsigned long flags; 247 + 248 + /* adjust: 12 bit samples (left aligned), built from 249 + * two 8 bit values writen msb-first. 250 + */ 251 + x = be16_to_cpu(ts->tc.x) >> 4; 252 + y = be16_to_cpu(ts->tc.y) >> 4; 253 + z1 = be16_to_cpu(ts->tc.z1) >> 4; 254 + z2 = be16_to_cpu(ts->tc.z2) >> 4; 255 + 256 + /* range filtering */ 257 + if (x == MAX_12BIT) 258 + x = 0; 259 + 260 + if (x && z1 && ts->spi->dev.power.power_state.event == PM_EVENT_ON) { 261 + /* compute touch pressure resistance using equation #2 */ 262 + Rt = z2; 263 + Rt -= z1; 264 + Rt *= x; 265 + Rt *= ts->x_plate_ohms; 266 + Rt /= z1; 267 + Rt = (Rt + 2047) >> 12; 268 + } else 269 + Rt = 0; 270 + 271 + /* NOTE: "pendown" is inferred from pressure; we don't rely on 272 + * being able to check nPENIRQ status, or "friendly" trigger modes 273 + * (both-edges is much better than just-falling or low-level). 274 + * 275 + * REVISIT: some boards may require reading nPENIRQ; it's 276 + * needed on 7843. and 7845 reads pressure differently... 277 + * 278 + * REVISIT: the touchscreen might not be connected; this code 279 + * won't notice that, even if nPENIRQ never fires ... 280 + */ 281 + if (!ts->pendown && Rt != 0) { 282 + input_report_key(&ts->input, BTN_TOUCH, 1); 283 + sync = 1; 284 + } else if (ts->pendown && Rt == 0) { 285 + input_report_key(&ts->input, BTN_TOUCH, 0); 286 + sync = 1; 287 + } 288 + 289 + if (Rt) { 290 + input_report_abs(&ts->input, ABS_X, x); 291 + input_report_abs(&ts->input, ABS_Y, y); 292 + input_report_abs(&ts->input, ABS_PRESSURE, Rt); 293 + sync = 1; 294 + } 295 + if (sync) 296 + input_sync(&ts->input); 297 + 298 + #ifdef VERBOSE 299 + if (Rt || ts->pendown) 300 + pr_debug("%s: %d/%d/%d%s\n", ts->spi->dev.bus_id, 301 + x, y, Rt, Rt ? "" : " UP"); 302 + #endif 303 + 304 + /* don't retrigger while we're suspended */ 305 + spin_lock_irqsave(&ts->lock, flags); 306 + 307 + ts->pendown = (Rt != 0); 308 + ts->pending = 0; 309 + 310 + if (ts->spi->dev.power.power_state.event == PM_EVENT_ON) { 311 + if (ts->pendown) 312 + mod_timer(&ts->timer, jiffies + TS_POLL_PERIOD); 313 + else if (ts->irq_disabled) { 314 + ts->irq_disabled = 0; 315 + enable_irq(ts->spi->irq); 316 + } 317 + } 318 + 319 + spin_unlock_irqrestore(&ts->lock, flags); 320 + } 321 + 322 + static void ads7846_timer(unsigned long handle) 323 + { 324 + struct ads7846 *ts = (void *)handle; 325 + int status = 0; 326 + unsigned long flags; 327 + 328 + spin_lock_irqsave(&ts->lock, flags); 329 + if (!ts->pending) { 330 + ts->pending = 1; 331 + if (!ts->irq_disabled) { 332 + ts->irq_disabled = 1; 333 + disable_irq(ts->spi->irq); 334 + } 335 + status = spi_async(ts->spi, &ts->msg); 336 + if (status) 337 + dev_err(&ts->spi->dev, "spi_async --> %d\n", 338 + status); 339 + } 340 + spin_unlock_irqrestore(&ts->lock, flags); 341 + } 342 + 343 + static irqreturn_t ads7846_irq(int irq, void *handle, struct pt_regs *regs) 344 + { 345 + ads7846_timer((unsigned long) handle); 346 + return IRQ_HANDLED; 347 + } 348 + 349 + /*--------------------------------------------------------------------------*/ 350 + 351 + static int 352 + ads7846_suspend(struct spi_device *spi, pm_message_t message) 353 + { 354 + struct ads7846 *ts = dev_get_drvdata(&spi->dev); 355 + unsigned long flags; 356 + 357 + spin_lock_irqsave(&ts->lock, flags); 358 + 359 + spi->dev.power.power_state = message; 360 + 361 + /* are we waiting for IRQ, or polling? */ 362 + if (!ts->pendown) { 363 + if (!ts->irq_disabled) { 364 + ts->irq_disabled = 1; 365 + disable_irq(ts->spi->irq); 366 + } 367 + } else { 368 + /* polling; force a final SPI completion; 369 + * that will clean things up neatly 370 + */ 371 + if (!ts->pending) 372 + mod_timer(&ts->timer, jiffies); 373 + 374 + while (ts->pendown || ts->pending) { 375 + spin_unlock_irqrestore(&ts->lock, flags); 376 + udelay(10); 377 + spin_lock_irqsave(&ts->lock, flags); 378 + } 379 + } 380 + 381 + /* we know the chip's in lowpower mode since we always 382 + * leave it that way after every request 383 + */ 384 + 385 + spin_unlock_irqrestore(&ts->lock, flags); 386 + return 0; 387 + } 388 + 389 + static int ads7846_resume(struct spi_device *spi) 390 + { 391 + struct ads7846 *ts = dev_get_drvdata(&spi->dev); 392 + 393 + ts->irq_disabled = 0; 394 + enable_irq(ts->spi->irq); 395 + spi->dev.power.power_state = PMSG_ON; 396 + return 0; 397 + } 398 + 399 + static int __devinit ads7846_probe(struct spi_device *spi) 400 + { 401 + struct ads7846 *ts; 402 + struct ads7846_platform_data *pdata = spi->dev.platform_data; 403 + struct spi_transfer *x; 404 + int i; 405 + 406 + if (!spi->irq) { 407 + dev_dbg(&spi->dev, "no IRQ?\n"); 408 + return -ENODEV; 409 + } 410 + 411 + if (!pdata) { 412 + dev_dbg(&spi->dev, "no platform data?\n"); 413 + return -ENODEV; 414 + } 415 + 416 + /* don't exceed max specified sample rate */ 417 + if (spi->max_speed_hz > (125000 * 16)) { 418 + dev_dbg(&spi->dev, "f(sample) %d KHz?\n", 419 + (spi->max_speed_hz/16)/1000); 420 + return -EINVAL; 421 + } 422 + 423 + /* We'd set the wordsize to 12 bits ... except that some controllers 424 + * will then treat the 8 bit command words as 12 bits (and drop the 425 + * four MSBs of the 12 bit result). Result: inputs must be shifted 426 + * to discard the four garbage LSBs. 427 + */ 428 + 429 + if (!(ts = kzalloc(sizeof(struct ads7846), GFP_KERNEL))) 430 + return -ENOMEM; 431 + 432 + dev_set_drvdata(&spi->dev, ts); 433 + 434 + ts->spi = spi; 435 + spi->dev.power.power_state = PMSG_ON; 436 + 437 + init_timer(&ts->timer); 438 + ts->timer.data = (unsigned long) ts; 439 + ts->timer.function = ads7846_timer; 440 + 441 + ts->model = pdata->model ? : 7846; 442 + ts->vref_delay_usecs = pdata->vref_delay_usecs ? : 100; 443 + ts->x_plate_ohms = pdata->x_plate_ohms ? : 400; 444 + 445 + init_input_dev(&ts->input); 446 + 447 + ts->input.dev = &spi->dev; 448 + ts->input.name = "ADS784x Touchscreen"; 449 + snprintf(ts->phys, sizeof ts->phys, "%s/input0", spi->dev.bus_id); 450 + ts->input.phys = ts->phys; 451 + 452 + ts->input.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); 453 + ts->input.keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); 454 + input_set_abs_params(&ts->input, ABS_X, 455 + pdata->x_min ? : 0, 456 + pdata->x_max ? : MAX_12BIT, 457 + 0, 0); 458 + input_set_abs_params(&ts->input, ABS_Y, 459 + pdata->y_min ? : 0, 460 + pdata->y_max ? : MAX_12BIT, 461 + 0, 0); 462 + input_set_abs_params(&ts->input, ABS_PRESSURE, 463 + pdata->pressure_min, pdata->pressure_max, 0, 0); 464 + 465 + input_register_device(&ts->input); 466 + 467 + /* set up the transfers to read touchscreen state; this assumes we 468 + * use formula #2 for pressure, not #3. 469 + */ 470 + x = ts->xfer; 471 + 472 + /* y- still on; turn on only y+ (and ADC) */ 473 + x->tx_buf = &read_y; 474 + x->len = 1; 475 + x++; 476 + x->rx_buf = &ts->tc.y; 477 + x->len = 2; 478 + x++; 479 + 480 + /* turn y+ off, x- on; we'll use formula #2 */ 481 + if (ts->model == 7846) { 482 + x->tx_buf = &read_z1; 483 + x->len = 1; 484 + x++; 485 + x->rx_buf = &ts->tc.z1; 486 + x->len = 2; 487 + x++; 488 + 489 + x->tx_buf = &read_z2; 490 + x->len = 1; 491 + x++; 492 + x->rx_buf = &ts->tc.z2; 493 + x->len = 2; 494 + x++; 495 + } 496 + 497 + /* turn y- off, x+ on, then leave in lowpower */ 498 + x->tx_buf = &read_x; 499 + x->len = 1; 500 + x++; 501 + x->rx_buf = &ts->tc.x; 502 + x->len = 2; 503 + x++; 504 + 505 + CS_CHANGE(x[-1]); 506 + 507 + for (i = 0; i < x - ts->xfer; i++) 508 + spi_message_add_tail(&ts->xfer[i], &ts->msg); 509 + ts->msg.complete = ads7846_rx; 510 + ts->msg.context = ts; 511 + 512 + if (request_irq(spi->irq, ads7846_irq, SA_SAMPLE_RANDOM, 513 + spi->dev.bus_id, ts)) { 514 + dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq); 515 + input_unregister_device(&ts->input); 516 + kfree(ts); 517 + return -EBUSY; 518 + } 519 + set_irq_type(spi->irq, IRQT_FALLING); 520 + 521 + dev_info(&spi->dev, "touchscreen, irq %d\n", spi->irq); 522 + 523 + /* take a first sample, leaving nPENIRQ active; avoid 524 + * the touchscreen, in case it's not connected. 525 + */ 526 + (void) ads7846_read12_ser(&spi->dev, 527 + READ_12BIT_SER(vaux) | ADS_PD10_ALL_ON); 528 + 529 + /* ads7843/7845 don't have temperature sensors, and 530 + * use the other sensors a bit differently too 531 + */ 532 + if (ts->model == 7846) { 533 + device_create_file(&spi->dev, &dev_attr_temp0); 534 + device_create_file(&spi->dev, &dev_attr_temp1); 535 + } 536 + if (ts->model != 7845) 537 + device_create_file(&spi->dev, &dev_attr_vbatt); 538 + device_create_file(&spi->dev, &dev_attr_vaux); 539 + 540 + return 0; 541 + } 542 + 543 + static int __devexit ads7846_remove(struct spi_device *spi) 544 + { 545 + struct ads7846 *ts = dev_get_drvdata(&spi->dev); 546 + 547 + ads7846_suspend(spi, PMSG_SUSPEND); 548 + free_irq(ts->spi->irq, ts); 549 + if (ts->irq_disabled) 550 + enable_irq(ts->spi->irq); 551 + 552 + if (ts->model == 7846) { 553 + device_remove_file(&spi->dev, &dev_attr_temp0); 554 + device_remove_file(&spi->dev, &dev_attr_temp1); 555 + } 556 + if (ts->model != 7845) 557 + device_remove_file(&spi->dev, &dev_attr_vbatt); 558 + device_remove_file(&spi->dev, &dev_attr_vaux); 559 + 560 + input_unregister_device(&ts->input); 561 + kfree(ts); 562 + 563 + dev_dbg(&spi->dev, "unregistered touchscreen\n"); 564 + return 0; 565 + } 566 + 567 + static struct spi_driver ads7846_driver = { 568 + .driver = { 569 + .name = "ads7846", 570 + .bus = &spi_bus_type, 571 + .owner = THIS_MODULE, 572 + }, 573 + .probe = ads7846_probe, 574 + .remove = __devexit_p(ads7846_remove), 575 + .suspend = ads7846_suspend, 576 + .resume = ads7846_resume, 577 + }; 578 + 579 + static int __init ads7846_init(void) 580 + { 581 + /* grr, board-specific init should stay out of drivers!! */ 582 + 583 + #ifdef CONFIG_ARCH_OMAP 584 + if (machine_is_omap_osk()) { 585 + /* GPIO4 = PENIRQ; GPIO6 = BUSY */ 586 + omap_request_gpio(4); 587 + omap_set_gpio_direction(4, 1); 588 + omap_request_gpio(6); 589 + omap_set_gpio_direction(6, 1); 590 + } 591 + // also TI 1510 Innovator, bitbanging through FPGA 592 + // also Nokia 770 593 + // also Palm Tungsten T2 594 + #endif 595 + 596 + // PXA: 597 + // also Dell Axim X50 598 + // also HP iPaq H191x/H192x/H415x/H435x 599 + // also Intel Lubbock (additional to UCB1400; as temperature sensor) 600 + // also Sharp Zaurus C7xx, C8xx (corgi/sheperd/husky) 601 + 602 + // Atmel at91sam9261-EK uses ads7843 603 + 604 + // also various AMD Au1x00 devel boards 605 + 606 + return spi_register_driver(&ads7846_driver); 607 + } 608 + module_init(ads7846_init); 609 + 610 + static void __exit ads7846_exit(void) 611 + { 612 + spi_unregister_driver(&ads7846_driver); 613 + 614 + #ifdef CONFIG_ARCH_OMAP 615 + if (machine_is_omap_osk()) { 616 + omap_free_gpio(4); 617 + omap_free_gpio(6); 618 + } 619 + #endif 620 + 621 + } 622 + module_exit(ads7846_exit); 623 + 624 + MODULE_DESCRIPTION("ADS7846 TouchScreen Driver"); 625 + MODULE_LICENSE("GPL");
+16
drivers/mtd/devices/Kconfig
··· 47 accelerator. Say Y here if you have a DECstation 5000/2x0 or a 48 DECsystem 5900 equipped with such a module. 49 50 config MTD_SLRAM 51 tristate "Uncached system RAM" 52 depends on MTD
··· 47 accelerator. Say Y here if you have a DECstation 5000/2x0 or a 48 DECsystem 5900 equipped with such a module. 49 50 + config MTD_DATAFLASH 51 + tristate "Support for AT45xxx DataFlash" 52 + depends on MTD && SPI_MASTER && EXPERIMENTAL 53 + help 54 + This enables access to AT45xxx DataFlash chips, using SPI. 55 + Sometimes DataFlash chips are packaged inside MMC-format 56 + cards; at this writing, the MMC stack won't handle those. 57 + 58 + config MTD_M25P80 59 + tristate "Support for M25 SPI Flash" 60 + depends on MTD && SPI_MASTER && EXPERIMENTAL 61 + help 62 + This enables access to ST M25P80 and similar SPI flash chips, 63 + used for program and data storage. Set up your spi devices 64 + with the right board-specific platform data. 65 + 66 config MTD_SLRAM 67 tristate "Uncached system RAM" 68 depends on MTD
+2
drivers/mtd/devices/Makefile
··· 23 obj-$(CONFIG_MTD_LART) += lart.o 24 obj-$(CONFIG_MTD_BLKMTD) += blkmtd.o 25 obj-$(CONFIG_MTD_BLOCK2MTD) += block2mtd.o
··· 23 obj-$(CONFIG_MTD_LART) += lart.o 24 obj-$(CONFIG_MTD_BLKMTD) += blkmtd.o 25 obj-$(CONFIG_MTD_BLOCK2MTD) += block2mtd.o 26 + obj-$(CONFIG_MTD_DATAFLASH) += mtd_dataflash.o 27 + obj-$(CONFIG_MTD_M25P80) += m25p80.o
+582
drivers/mtd/devices/m25p80.c
···
··· 1 + /* 2 + * MTD SPI driver for ST M25Pxx flash chips 3 + * 4 + * Author: Mike Lavender, mike@steroidmicros.com 5 + * 6 + * Copyright (c) 2005, Intec Automation Inc. 7 + * 8 + * Some parts are based on lart.c by Abraham Van Der Merwe 9 + * 10 + * Cleaned up and generalized based on mtd_dataflash.c 11 + * 12 + * This code is free software; you can redistribute it and/or modify 13 + * it under the terms of the GNU General Public License version 2 as 14 + * published by the Free Software Foundation. 15 + * 16 + */ 17 + 18 + #include <linux/init.h> 19 + #include <linux/module.h> 20 + #include <linux/device.h> 21 + #include <linux/interrupt.h> 22 + #include <linux/interrupt.h> 23 + #include <linux/mtd/mtd.h> 24 + #include <linux/mtd/partitions.h> 25 + #include <linux/spi/spi.h> 26 + #include <linux/spi/flash.h> 27 + 28 + #include <asm/semaphore.h> 29 + 30 + 31 + /* NOTE: AT 25F and SST 25LF series are very similar, 32 + * but commands for sector erase and chip id differ... 33 + */ 34 + 35 + #define FLASH_PAGESIZE 256 36 + 37 + /* Flash opcodes. */ 38 + #define OPCODE_WREN 6 /* Write enable */ 39 + #define OPCODE_RDSR 5 /* Read status register */ 40 + #define OPCODE_READ 3 /* Read data bytes */ 41 + #define OPCODE_PP 2 /* Page program */ 42 + #define OPCODE_SE 0xd8 /* Sector erase */ 43 + #define OPCODE_RES 0xab /* Read Electronic Signature */ 44 + #define OPCODE_RDID 0x9f /* Read JEDEC ID */ 45 + 46 + /* Status Register bits. */ 47 + #define SR_WIP 1 /* Write in progress */ 48 + #define SR_WEL 2 /* Write enable latch */ 49 + #define SR_BP0 4 /* Block protect 0 */ 50 + #define SR_BP1 8 /* Block protect 1 */ 51 + #define SR_BP2 0x10 /* Block protect 2 */ 52 + #define SR_SRWD 0x80 /* SR write protect */ 53 + 54 + /* Define max times to check status register before we give up. */ 55 + #define MAX_READY_WAIT_COUNT 100000 56 + 57 + 58 + #ifdef CONFIG_MTD_PARTITIONS 59 + #define mtd_has_partitions() (1) 60 + #else 61 + #define mtd_has_partitions() (0) 62 + #endif 63 + 64 + /****************************************************************************/ 65 + 66 + struct m25p { 67 + struct spi_device *spi; 68 + struct semaphore lock; 69 + struct mtd_info mtd; 70 + unsigned partitioned; 71 + u8 command[4]; 72 + }; 73 + 74 + static inline struct m25p *mtd_to_m25p(struct mtd_info *mtd) 75 + { 76 + return container_of(mtd, struct m25p, mtd); 77 + } 78 + 79 + /****************************************************************************/ 80 + 81 + /* 82 + * Internal helper functions 83 + */ 84 + 85 + /* 86 + * Read the status register, returning its value in the location 87 + * Return the status register value. 88 + * Returns negative if error occurred. 89 + */ 90 + static int read_sr(struct m25p *flash) 91 + { 92 + ssize_t retval; 93 + u8 code = OPCODE_RDSR; 94 + u8 val; 95 + 96 + retval = spi_write_then_read(flash->spi, &code, 1, &val, 1); 97 + 98 + if (retval < 0) { 99 + dev_err(&flash->spi->dev, "error %d reading SR\n", 100 + (int) retval); 101 + return retval; 102 + } 103 + 104 + return val; 105 + } 106 + 107 + 108 + /* 109 + * Set write enable latch with Write Enable command. 110 + * Returns negative if error occurred. 111 + */ 112 + static inline int write_enable(struct m25p *flash) 113 + { 114 + u8 code = OPCODE_WREN; 115 + 116 + return spi_write_then_read(flash->spi, &code, 1, NULL, 0); 117 + } 118 + 119 + 120 + /* 121 + * Service routine to read status register until ready, or timeout occurs. 122 + * Returns non-zero if error. 123 + */ 124 + static int wait_till_ready(struct m25p *flash) 125 + { 126 + int count; 127 + int sr; 128 + 129 + /* one chip guarantees max 5 msec wait here after page writes, 130 + * but potentially three seconds (!) after page erase. 131 + */ 132 + for (count = 0; count < MAX_READY_WAIT_COUNT; count++) { 133 + if ((sr = read_sr(flash)) < 0) 134 + break; 135 + else if (!(sr & SR_WIP)) 136 + return 0; 137 + 138 + /* REVISIT sometimes sleeping would be best */ 139 + } 140 + 141 + return 1; 142 + } 143 + 144 + 145 + /* 146 + * Erase one sector of flash memory at offset ``offset'' which is any 147 + * address within the sector which should be erased. 148 + * 149 + * Returns 0 if successful, non-zero otherwise. 150 + */ 151 + static int erase_sector(struct m25p *flash, u32 offset) 152 + { 153 + DEBUG(MTD_DEBUG_LEVEL3, "%s: %s at 0x%08x\n", flash->spi->dev.bus_id, 154 + __FUNCTION__, offset); 155 + 156 + /* Wait until finished previous write command. */ 157 + if (wait_till_ready(flash)) 158 + return 1; 159 + 160 + /* Send write enable, then erase commands. */ 161 + write_enable(flash); 162 + 163 + /* Set up command buffer. */ 164 + flash->command[0] = OPCODE_SE; 165 + flash->command[1] = offset >> 16; 166 + flash->command[2] = offset >> 8; 167 + flash->command[3] = offset; 168 + 169 + spi_write(flash->spi, flash->command, sizeof(flash->command)); 170 + 171 + return 0; 172 + } 173 + 174 + /****************************************************************************/ 175 + 176 + /* 177 + * MTD implementation 178 + */ 179 + 180 + /* 181 + * Erase an address range on the flash chip. The address range may extend 182 + * one or more erase sectors. Return an error is there is a problem erasing. 183 + */ 184 + static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr) 185 + { 186 + struct m25p *flash = mtd_to_m25p(mtd); 187 + u32 addr,len; 188 + 189 + DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n", 190 + flash->spi->dev.bus_id, __FUNCTION__, "at", 191 + (u32)instr->addr, instr->len); 192 + 193 + /* sanity checks */ 194 + if (instr->addr + instr->len > flash->mtd.size) 195 + return -EINVAL; 196 + if ((instr->addr % mtd->erasesize) != 0 197 + || (instr->len % mtd->erasesize) != 0) { 198 + return -EINVAL; 199 + } 200 + 201 + addr = instr->addr; 202 + len = instr->len; 203 + 204 + down(&flash->lock); 205 + 206 + /* now erase those sectors */ 207 + while (len) { 208 + if (erase_sector(flash, addr)) { 209 + instr->state = MTD_ERASE_FAILED; 210 + up(&flash->lock); 211 + return -EIO; 212 + } 213 + 214 + addr += mtd->erasesize; 215 + len -= mtd->erasesize; 216 + } 217 + 218 + up(&flash->lock); 219 + 220 + instr->state = MTD_ERASE_DONE; 221 + mtd_erase_callback(instr); 222 + 223 + return 0; 224 + } 225 + 226 + /* 227 + * Read an address range from the flash chip. The address range 228 + * may be any size provided it is within the physical boundaries. 229 + */ 230 + static int m25p80_read(struct mtd_info *mtd, loff_t from, size_t len, 231 + size_t *retlen, u_char *buf) 232 + { 233 + struct m25p *flash = mtd_to_m25p(mtd); 234 + struct spi_transfer t[2]; 235 + struct spi_message m; 236 + 237 + DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n", 238 + flash->spi->dev.bus_id, __FUNCTION__, "from", 239 + (u32)from, len); 240 + 241 + /* sanity checks */ 242 + if (!len) 243 + return 0; 244 + 245 + if (from + len > flash->mtd.size) 246 + return -EINVAL; 247 + 248 + spi_message_init(&m); 249 + memset(t, 0, (sizeof t)); 250 + 251 + t[0].tx_buf = flash->command; 252 + t[0].len = sizeof(flash->command); 253 + spi_message_add_tail(&t[0], &m); 254 + 255 + t[1].rx_buf = buf; 256 + t[1].len = len; 257 + spi_message_add_tail(&t[1], &m); 258 + 259 + /* Byte count starts at zero. */ 260 + if (retlen) 261 + *retlen = 0; 262 + 263 + down(&flash->lock); 264 + 265 + /* Wait till previous write/erase is done. */ 266 + if (wait_till_ready(flash)) { 267 + /* REVISIT status return?? */ 268 + up(&flash->lock); 269 + return 1; 270 + } 271 + 272 + /* NOTE: OPCODE_FAST_READ (if available) is faster... */ 273 + 274 + /* Set up the write data buffer. */ 275 + flash->command[0] = OPCODE_READ; 276 + flash->command[1] = from >> 16; 277 + flash->command[2] = from >> 8; 278 + flash->command[3] = from; 279 + 280 + spi_sync(flash->spi, &m); 281 + 282 + *retlen = m.actual_length - sizeof(flash->command); 283 + 284 + up(&flash->lock); 285 + 286 + return 0; 287 + } 288 + 289 + /* 290 + * Write an address range to the flash chip. Data must be written in 291 + * FLASH_PAGESIZE chunks. The address range may be any size provided 292 + * it is within the physical boundaries. 293 + */ 294 + static int m25p80_write(struct mtd_info *mtd, loff_t to, size_t len, 295 + size_t *retlen, const u_char *buf) 296 + { 297 + struct m25p *flash = mtd_to_m25p(mtd); 298 + u32 page_offset, page_size; 299 + struct spi_transfer t[2]; 300 + struct spi_message m; 301 + 302 + DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n", 303 + flash->spi->dev.bus_id, __FUNCTION__, "to", 304 + (u32)to, len); 305 + 306 + if (retlen) 307 + *retlen = 0; 308 + 309 + /* sanity checks */ 310 + if (!len) 311 + return(0); 312 + 313 + if (to + len > flash->mtd.size) 314 + return -EINVAL; 315 + 316 + spi_message_init(&m); 317 + memset(t, 0, (sizeof t)); 318 + 319 + t[0].tx_buf = flash->command; 320 + t[0].len = sizeof(flash->command); 321 + spi_message_add_tail(&t[0], &m); 322 + 323 + t[1].tx_buf = buf; 324 + spi_message_add_tail(&t[1], &m); 325 + 326 + down(&flash->lock); 327 + 328 + /* Wait until finished previous write command. */ 329 + if (wait_till_ready(flash)) 330 + return 1; 331 + 332 + write_enable(flash); 333 + 334 + /* Set up the opcode in the write buffer. */ 335 + flash->command[0] = OPCODE_PP; 336 + flash->command[1] = to >> 16; 337 + flash->command[2] = to >> 8; 338 + flash->command[3] = to; 339 + 340 + /* what page do we start with? */ 341 + page_offset = to % FLASH_PAGESIZE; 342 + 343 + /* do all the bytes fit onto one page? */ 344 + if (page_offset + len <= FLASH_PAGESIZE) { 345 + t[1].len = len; 346 + 347 + spi_sync(flash->spi, &m); 348 + 349 + *retlen = m.actual_length - sizeof(flash->command); 350 + } else { 351 + u32 i; 352 + 353 + /* the size of data remaining on the first page */ 354 + page_size = FLASH_PAGESIZE - page_offset; 355 + 356 + t[1].len = page_size; 357 + spi_sync(flash->spi, &m); 358 + 359 + *retlen = m.actual_length - sizeof(flash->command); 360 + 361 + /* write everything in PAGESIZE chunks */ 362 + for (i = page_size; i < len; i += page_size) { 363 + page_size = len - i; 364 + if (page_size > FLASH_PAGESIZE) 365 + page_size = FLASH_PAGESIZE; 366 + 367 + /* write the next page to flash */ 368 + flash->command[1] = (to + i) >> 16; 369 + flash->command[2] = (to + i) >> 8; 370 + flash->command[3] = (to + i); 371 + 372 + t[1].tx_buf = buf + i; 373 + t[1].len = page_size; 374 + 375 + wait_till_ready(flash); 376 + 377 + write_enable(flash); 378 + 379 + spi_sync(flash->spi, &m); 380 + 381 + if (retlen) 382 + *retlen += m.actual_length 383 + - sizeof(flash->command); 384 + } 385 + } 386 + 387 + up(&flash->lock); 388 + 389 + return 0; 390 + } 391 + 392 + 393 + /****************************************************************************/ 394 + 395 + /* 396 + * SPI device driver setup and teardown 397 + */ 398 + 399 + struct flash_info { 400 + char *name; 401 + u8 id; 402 + u16 jedec_id; 403 + unsigned sector_size; 404 + unsigned n_sectors; 405 + }; 406 + 407 + static struct flash_info __devinitdata m25p_data [] = { 408 + /* REVISIT: fill in JEDEC ids, for parts that have them */ 409 + { "m25p05", 0x05, 0x0000, 32 * 1024, 2 }, 410 + { "m25p10", 0x10, 0x0000, 32 * 1024, 4 }, 411 + { "m25p20", 0x11, 0x0000, 64 * 1024, 4 }, 412 + { "m25p40", 0x12, 0x0000, 64 * 1024, 8 }, 413 + { "m25p80", 0x13, 0x0000, 64 * 1024, 16 }, 414 + { "m25p16", 0x14, 0x0000, 64 * 1024, 32 }, 415 + { "m25p32", 0x15, 0x0000, 64 * 1024, 64 }, 416 + { "m25p64", 0x16, 0x2017, 64 * 1024, 128 }, 417 + }; 418 + 419 + /* 420 + * board specific setup should have ensured the SPI clock used here 421 + * matches what the READ command supports, at least until this driver 422 + * understands FAST_READ (for clocks over 25 MHz). 423 + */ 424 + static int __devinit m25p_probe(struct spi_device *spi) 425 + { 426 + struct flash_platform_data *data; 427 + struct m25p *flash; 428 + struct flash_info *info; 429 + unsigned i; 430 + 431 + /* Platform data helps sort out which chip type we have, as 432 + * well as how this board partitions it. 433 + */ 434 + data = spi->dev.platform_data; 435 + if (!data || !data->type) { 436 + /* FIXME some chips can identify themselves with RES 437 + * or JEDEC get-id commands. Try them ... 438 + */ 439 + DEBUG(MTD_DEBUG_LEVEL1, "%s: no chip id\n", 440 + flash->spi->dev.bus_id); 441 + return -ENODEV; 442 + } 443 + 444 + for (i = 0, info = m25p_data; i < ARRAY_SIZE(m25p_data); i++, info++) { 445 + if (strcmp(data->type, info->name) == 0) 446 + break; 447 + } 448 + if (i == ARRAY_SIZE(m25p_data)) { 449 + DEBUG(MTD_DEBUG_LEVEL1, "%s: unrecognized id %s\n", 450 + flash->spi->dev.bus_id, data->type); 451 + return -ENODEV; 452 + } 453 + 454 + flash = kzalloc(sizeof *flash, SLAB_KERNEL); 455 + if (!flash) 456 + return -ENOMEM; 457 + 458 + flash->spi = spi; 459 + init_MUTEX(&flash->lock); 460 + dev_set_drvdata(&spi->dev, flash); 461 + 462 + if (data->name) 463 + flash->mtd.name = data->name; 464 + else 465 + flash->mtd.name = spi->dev.bus_id; 466 + 467 + flash->mtd.type = MTD_NORFLASH; 468 + flash->mtd.flags = MTD_CAP_NORFLASH; 469 + flash->mtd.size = info->sector_size * info->n_sectors; 470 + flash->mtd.erasesize = info->sector_size; 471 + flash->mtd.erase = m25p80_erase; 472 + flash->mtd.read = m25p80_read; 473 + flash->mtd.write = m25p80_write; 474 + 475 + dev_info(&spi->dev, "%s (%d Kbytes)\n", info->name, 476 + flash->mtd.size / 1024); 477 + 478 + DEBUG(MTD_DEBUG_LEVEL2, 479 + "mtd .name = %s, .size = 0x%.8x (%uM) " 480 + ".erasesize = 0x%.8x (%uK) .numeraseregions = %d\n", 481 + flash->mtd.name, 482 + flash->mtd.size, flash->mtd.size / (1024*1024), 483 + flash->mtd.erasesize, flash->mtd.erasesize / 1024, 484 + flash->mtd.numeraseregions); 485 + 486 + if (flash->mtd.numeraseregions) 487 + for (i = 0; i < flash->mtd.numeraseregions; i++) 488 + DEBUG(MTD_DEBUG_LEVEL2, 489 + "mtd.eraseregions[%d] = { .offset = 0x%.8x, " 490 + ".erasesize = 0x%.8x (%uK), " 491 + ".numblocks = %d }\n", 492 + i, flash->mtd.eraseregions[i].offset, 493 + flash->mtd.eraseregions[i].erasesize, 494 + flash->mtd.eraseregions[i].erasesize / 1024, 495 + flash->mtd.eraseregions[i].numblocks); 496 + 497 + 498 + /* partitions should match sector boundaries; and it may be good to 499 + * use readonly partitions for writeprotected sectors (BP2..BP0). 500 + */ 501 + if (mtd_has_partitions()) { 502 + struct mtd_partition *parts = NULL; 503 + int nr_parts = 0; 504 + 505 + #ifdef CONFIG_MTD_CMDLINE_PARTS 506 + static const char *part_probes[] = { "cmdlinepart", NULL, }; 507 + 508 + nr_parts = parse_mtd_partitions(&flash->mtd, 509 + part_probes, &parts, 0); 510 + #endif 511 + 512 + if (nr_parts <= 0 && data && data->parts) { 513 + parts = data->parts; 514 + nr_parts = data->nr_parts; 515 + } 516 + 517 + if (nr_parts > 0) { 518 + for (i = 0; i < data->nr_parts; i++) { 519 + DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = " 520 + "{.name = %s, .offset = 0x%.8x, " 521 + ".size = 0x%.8x (%uK) }\n", 522 + i, data->parts[i].name, 523 + data->parts[i].offset, 524 + data->parts[i].size, 525 + data->parts[i].size / 1024); 526 + } 527 + flash->partitioned = 1; 528 + return add_mtd_partitions(&flash->mtd, parts, nr_parts); 529 + } 530 + } else if (data->nr_parts) 531 + dev_warn(&spi->dev, "ignoring %d default partitions on %s\n", 532 + data->nr_parts, data->name); 533 + 534 + return add_mtd_device(&flash->mtd) == 1 ? -ENODEV : 0; 535 + } 536 + 537 + 538 + static int __devexit m25p_remove(struct spi_device *spi) 539 + { 540 + struct m25p *flash = dev_get_drvdata(&spi->dev); 541 + int status; 542 + 543 + /* Clean up MTD stuff. */ 544 + if (mtd_has_partitions() && flash->partitioned) 545 + status = del_mtd_partitions(&flash->mtd); 546 + else 547 + status = del_mtd_device(&flash->mtd); 548 + if (status == 0) 549 + kfree(flash); 550 + return 0; 551 + } 552 + 553 + 554 + static struct spi_driver m25p80_driver = { 555 + .driver = { 556 + .name = "m25p80", 557 + .bus = &spi_bus_type, 558 + .owner = THIS_MODULE, 559 + }, 560 + .probe = m25p_probe, 561 + .remove = __devexit_p(m25p_remove), 562 + }; 563 + 564 + 565 + static int m25p80_init(void) 566 + { 567 + return spi_register_driver(&m25p80_driver); 568 + } 569 + 570 + 571 + static void m25p80_exit(void) 572 + { 573 + spi_unregister_driver(&m25p80_driver); 574 + } 575 + 576 + 577 + module_init(m25p80_init); 578 + module_exit(m25p80_exit); 579 + 580 + MODULE_LICENSE("GPL"); 581 + MODULE_AUTHOR("Mike Lavender"); 582 + MODULE_DESCRIPTION("MTD SPI driver for ST M25Pxx flash chips");
+629
drivers/mtd/devices/mtd_dataflash.c
···
··· 1 + /* 2 + * Atmel AT45xxx DataFlash MTD driver for lightweight SPI framework 3 + * 4 + * Largely derived from at91_dataflash.c: 5 + * Copyright (C) 2003-2005 SAN People (Pty) Ltd 6 + * 7 + * This program is free software; you can redistribute it and/or 8 + * modify it under the terms of the GNU General Public License 9 + * as published by the Free Software Foundation; either version 10 + * 2 of the License, or (at your option) any later version. 11 + */ 12 + #include <linux/config.h> 13 + #include <linux/module.h> 14 + #include <linux/init.h> 15 + #include <linux/slab.h> 16 + #include <linux/delay.h> 17 + #include <linux/device.h> 18 + #include <linux/spi/spi.h> 19 + #include <linux/spi/flash.h> 20 + 21 + #include <linux/mtd/mtd.h> 22 + #include <linux/mtd/partitions.h> 23 + 24 + 25 + /* 26 + * DataFlash is a kind of SPI flash. Most AT45 chips have two buffers in 27 + * each chip, which may be used for double buffered I/O; but this driver 28 + * doesn't (yet) use these for any kind of i/o overlap or prefetching. 29 + * 30 + * Sometimes DataFlash is packaged in MMC-format cards, although the 31 + * MMC stack can't use SPI (yet), or distinguish between MMC and DataFlash 32 + * protocols during enumeration. 33 + */ 34 + 35 + #define CONFIG_DATAFLASH_WRITE_VERIFY 36 + 37 + /* reads can bypass the buffers */ 38 + #define OP_READ_CONTINUOUS 0xE8 39 + #define OP_READ_PAGE 0xD2 40 + 41 + /* group B requests can run even while status reports "busy" */ 42 + #define OP_READ_STATUS 0xD7 /* group B */ 43 + 44 + /* move data between host and buffer */ 45 + #define OP_READ_BUFFER1 0xD4 /* group B */ 46 + #define OP_READ_BUFFER2 0xD6 /* group B */ 47 + #define OP_WRITE_BUFFER1 0x84 /* group B */ 48 + #define OP_WRITE_BUFFER2 0x87 /* group B */ 49 + 50 + /* erasing flash */ 51 + #define OP_ERASE_PAGE 0x81 52 + #define OP_ERASE_BLOCK 0x50 53 + 54 + /* move data between buffer and flash */ 55 + #define OP_TRANSFER_BUF1 0x53 56 + #define OP_TRANSFER_BUF2 0x55 57 + #define OP_MREAD_BUFFER1 0xD4 58 + #define OP_MREAD_BUFFER2 0xD6 59 + #define OP_MWERASE_BUFFER1 0x83 60 + #define OP_MWERASE_BUFFER2 0x86 61 + #define OP_MWRITE_BUFFER1 0x88 /* sector must be pre-erased */ 62 + #define OP_MWRITE_BUFFER2 0x89 /* sector must be pre-erased */ 63 + 64 + /* write to buffer, then write-erase to flash */ 65 + #define OP_PROGRAM_VIA_BUF1 0x82 66 + #define OP_PROGRAM_VIA_BUF2 0x85 67 + 68 + /* compare buffer to flash */ 69 + #define OP_COMPARE_BUF1 0x60 70 + #define OP_COMPARE_BUF2 0x61 71 + 72 + /* read flash to buffer, then write-erase to flash */ 73 + #define OP_REWRITE_VIA_BUF1 0x58 74 + #define OP_REWRITE_VIA_BUF2 0x59 75 + 76 + /* newer chips report JEDEC manufacturer and device IDs; chip 77 + * serial number and OTP bits; and per-sector writeprotect. 78 + */ 79 + #define OP_READ_ID 0x9F 80 + #define OP_READ_SECURITY 0x77 81 + #define OP_WRITE_SECURITY 0x9A /* OTP bits */ 82 + 83 + 84 + struct dataflash { 85 + u8 command[4]; 86 + char name[24]; 87 + 88 + unsigned partitioned:1; 89 + 90 + unsigned short page_offset; /* offset in flash address */ 91 + unsigned int page_size; /* of bytes per page */ 92 + 93 + struct semaphore lock; 94 + struct spi_device *spi; 95 + 96 + struct mtd_info mtd; 97 + }; 98 + 99 + #ifdef CONFIG_MTD_PARTITIONS 100 + #define mtd_has_partitions() (1) 101 + #else 102 + #define mtd_has_partitions() (0) 103 + #endif 104 + 105 + /* ......................................................................... */ 106 + 107 + /* 108 + * Return the status of the DataFlash device. 109 + */ 110 + static inline int dataflash_status(struct spi_device *spi) 111 + { 112 + /* NOTE: at45db321c over 25 MHz wants to write 113 + * a dummy byte after the opcode... 114 + */ 115 + return spi_w8r8(spi, OP_READ_STATUS); 116 + } 117 + 118 + /* 119 + * Poll the DataFlash device until it is READY. 120 + * This usually takes 5-20 msec or so; more for sector erase. 121 + */ 122 + static int dataflash_waitready(struct spi_device *spi) 123 + { 124 + int status; 125 + 126 + for (;;) { 127 + status = dataflash_status(spi); 128 + if (status < 0) { 129 + DEBUG(MTD_DEBUG_LEVEL1, "%s: status %d?\n", 130 + spi->dev.bus_id, status); 131 + status = 0; 132 + } 133 + 134 + if (status & (1 << 7)) /* RDY/nBSY */ 135 + return status; 136 + 137 + msleep(3); 138 + } 139 + } 140 + 141 + /* ......................................................................... */ 142 + 143 + /* 144 + * Erase pages of flash. 145 + */ 146 + static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr) 147 + { 148 + struct dataflash *priv = (struct dataflash *)mtd->priv; 149 + struct spi_device *spi = priv->spi; 150 + struct spi_transfer x = { .tx_dma = 0, }; 151 + struct spi_message msg; 152 + unsigned blocksize = priv->page_size << 3; 153 + u8 *command; 154 + 155 + DEBUG(MTD_DEBUG_LEVEL2, "%s: erase addr=0x%x len 0x%x\n", 156 + spi->dev.bus_id, 157 + instr->addr, instr->len); 158 + 159 + /* Sanity checks */ 160 + if ((instr->addr + instr->len) > mtd->size 161 + || (instr->len % priv->page_size) != 0 162 + || (instr->addr % priv->page_size) != 0) 163 + return -EINVAL; 164 + 165 + spi_message_init(&msg); 166 + 167 + x.tx_buf = command = priv->command; 168 + x.len = 4; 169 + spi_message_add_tail(&x, &msg); 170 + 171 + down(&priv->lock); 172 + while (instr->len > 0) { 173 + unsigned int pageaddr; 174 + int status; 175 + int do_block; 176 + 177 + /* Calculate flash page address; use block erase (for speed) if 178 + * we're at a block boundary and need to erase the whole block. 179 + */ 180 + pageaddr = instr->addr / priv->page_size; 181 + do_block = (pageaddr & 0x7) == 0 && instr->len <= blocksize; 182 + pageaddr = pageaddr << priv->page_offset; 183 + 184 + command[0] = do_block ? OP_ERASE_BLOCK : OP_ERASE_PAGE; 185 + command[1] = (u8)(pageaddr >> 16); 186 + command[2] = (u8)(pageaddr >> 8); 187 + command[3] = 0; 188 + 189 + DEBUG(MTD_DEBUG_LEVEL3, "ERASE %s: (%x) %x %x %x [%i]\n", 190 + do_block ? "block" : "page", 191 + command[0], command[1], command[2], command[3], 192 + pageaddr); 193 + 194 + status = spi_sync(spi, &msg); 195 + (void) dataflash_waitready(spi); 196 + 197 + if (status < 0) { 198 + printk(KERN_ERR "%s: erase %x, err %d\n", 199 + spi->dev.bus_id, pageaddr, status); 200 + /* REVISIT: can retry instr->retries times; or 201 + * giveup and instr->fail_addr = instr->addr; 202 + */ 203 + continue; 204 + } 205 + 206 + if (do_block) { 207 + instr->addr += blocksize; 208 + instr->len -= blocksize; 209 + } else { 210 + instr->addr += priv->page_size; 211 + instr->len -= priv->page_size; 212 + } 213 + } 214 + up(&priv->lock); 215 + 216 + /* Inform MTD subsystem that erase is complete */ 217 + instr->state = MTD_ERASE_DONE; 218 + mtd_erase_callback(instr); 219 + 220 + return 0; 221 + } 222 + 223 + /* 224 + * Read from the DataFlash device. 225 + * from : Start offset in flash device 226 + * len : Amount to read 227 + * retlen : About of data actually read 228 + * buf : Buffer containing the data 229 + */ 230 + static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len, 231 + size_t *retlen, u_char *buf) 232 + { 233 + struct dataflash *priv = (struct dataflash *)mtd->priv; 234 + struct spi_transfer x[2] = { { .tx_dma = 0, }, }; 235 + struct spi_message msg; 236 + unsigned int addr; 237 + u8 *command; 238 + int status; 239 + 240 + DEBUG(MTD_DEBUG_LEVEL2, "%s: read 0x%x..0x%x\n", 241 + priv->spi->dev.bus_id, (unsigned)from, (unsigned)(from + len)); 242 + 243 + *retlen = 0; 244 + 245 + /* Sanity checks */ 246 + if (!len) 247 + return 0; 248 + if (from + len > mtd->size) 249 + return -EINVAL; 250 + 251 + /* Calculate flash page/byte address */ 252 + addr = (((unsigned)from / priv->page_size) << priv->page_offset) 253 + + ((unsigned)from % priv->page_size); 254 + 255 + command = priv->command; 256 + 257 + DEBUG(MTD_DEBUG_LEVEL3, "READ: (%x) %x %x %x\n", 258 + command[0], command[1], command[2], command[3]); 259 + 260 + spi_message_init(&msg); 261 + 262 + x[0].tx_buf = command; 263 + x[0].len = 8; 264 + spi_message_add_tail(&x[0], &msg); 265 + 266 + x[1].rx_buf = buf; 267 + x[1].len = len; 268 + spi_message_add_tail(&x[1], &msg); 269 + 270 + down(&priv->lock); 271 + 272 + /* Continuous read, max clock = f(car) which may be less than 273 + * the peak rate available. Some chips support commands with 274 + * fewer "don't care" bytes. Both buffers stay unchanged. 275 + */ 276 + command[0] = OP_READ_CONTINUOUS; 277 + command[1] = (u8)(addr >> 16); 278 + command[2] = (u8)(addr >> 8); 279 + command[3] = (u8)(addr >> 0); 280 + /* plus 4 "don't care" bytes */ 281 + 282 + status = spi_sync(priv->spi, &msg); 283 + up(&priv->lock); 284 + 285 + if (status >= 0) { 286 + *retlen = msg.actual_length - 8; 287 + status = 0; 288 + } else 289 + DEBUG(MTD_DEBUG_LEVEL1, "%s: read %x..%x --> %d\n", 290 + priv->spi->dev.bus_id, 291 + (unsigned)from, (unsigned)(from + len), 292 + status); 293 + return status; 294 + } 295 + 296 + /* 297 + * Write to the DataFlash device. 298 + * to : Start offset in flash device 299 + * len : Amount to write 300 + * retlen : Amount of data actually written 301 + * buf : Buffer containing the data 302 + */ 303 + static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, 304 + size_t * retlen, const u_char * buf) 305 + { 306 + struct dataflash *priv = (struct dataflash *)mtd->priv; 307 + struct spi_device *spi = priv->spi; 308 + struct spi_transfer x[2] = { { .tx_dma = 0, }, }; 309 + struct spi_message msg; 310 + unsigned int pageaddr, addr, offset, writelen; 311 + size_t remaining = len; 312 + u_char *writebuf = (u_char *) buf; 313 + int status = -EINVAL; 314 + u8 *command; 315 + 316 + DEBUG(MTD_DEBUG_LEVEL2, "%s: write 0x%x..0x%x\n", 317 + spi->dev.bus_id, (unsigned)to, (unsigned)(to + len)); 318 + 319 + *retlen = 0; 320 + 321 + /* Sanity checks */ 322 + if (!len) 323 + return 0; 324 + if ((to + len) > mtd->size) 325 + return -EINVAL; 326 + 327 + spi_message_init(&msg); 328 + 329 + x[0].tx_buf = command = priv->command; 330 + x[0].len = 4; 331 + spi_message_add_tail(&x[0], &msg); 332 + 333 + pageaddr = ((unsigned)to / priv->page_size); 334 + offset = ((unsigned)to % priv->page_size); 335 + if (offset + len > priv->page_size) 336 + writelen = priv->page_size - offset; 337 + else 338 + writelen = len; 339 + 340 + down(&priv->lock); 341 + while (remaining > 0) { 342 + DEBUG(MTD_DEBUG_LEVEL3, "write @ %i:%i len=%i\n", 343 + pageaddr, offset, writelen); 344 + 345 + /* REVISIT: 346 + * (a) each page in a sector must be rewritten at least 347 + * once every 10K sibling erase/program operations. 348 + * (b) for pages that are already erased, we could 349 + * use WRITE+MWRITE not PROGRAM for ~30% speedup. 350 + * (c) WRITE to buffer could be done while waiting for 351 + * a previous MWRITE/MWERASE to complete ... 352 + * (d) error handling here seems to be mostly missing. 353 + * 354 + * Two persistent bits per page, plus a per-sector counter, 355 + * could support (a) and (b) ... we might consider using 356 + * the second half of sector zero, which is just one block, 357 + * to track that state. (On AT91, that sector should also 358 + * support boot-from-DataFlash.) 359 + */ 360 + 361 + addr = pageaddr << priv->page_offset; 362 + 363 + /* (1) Maybe transfer partial page to Buffer1 */ 364 + if (writelen != priv->page_size) { 365 + command[0] = OP_TRANSFER_BUF1; 366 + command[1] = (addr & 0x00FF0000) >> 16; 367 + command[2] = (addr & 0x0000FF00) >> 8; 368 + command[3] = 0; 369 + 370 + DEBUG(MTD_DEBUG_LEVEL3, "TRANSFER: (%x) %x %x %x\n", 371 + command[0], command[1], command[2], command[3]); 372 + 373 + status = spi_sync(spi, &msg); 374 + if (status < 0) 375 + DEBUG(MTD_DEBUG_LEVEL1, "%s: xfer %u -> %d \n", 376 + spi->dev.bus_id, addr, status); 377 + 378 + (void) dataflash_waitready(priv->spi); 379 + } 380 + 381 + /* (2) Program full page via Buffer1 */ 382 + addr += offset; 383 + command[0] = OP_PROGRAM_VIA_BUF1; 384 + command[1] = (addr & 0x00FF0000) >> 16; 385 + command[2] = (addr & 0x0000FF00) >> 8; 386 + command[3] = (addr & 0x000000FF); 387 + 388 + DEBUG(MTD_DEBUG_LEVEL3, "PROGRAM: (%x) %x %x %x\n", 389 + command[0], command[1], command[2], command[3]); 390 + 391 + x[1].tx_buf = writebuf; 392 + x[1].len = writelen; 393 + spi_message_add_tail(x + 1, &msg); 394 + status = spi_sync(spi, &msg); 395 + spi_transfer_del(x + 1); 396 + if (status < 0) 397 + DEBUG(MTD_DEBUG_LEVEL1, "%s: pgm %u/%u -> %d \n", 398 + spi->dev.bus_id, addr, writelen, status); 399 + 400 + (void) dataflash_waitready(priv->spi); 401 + 402 + 403 + #ifdef CONFIG_DATAFLASH_WRITE_VERIFY 404 + 405 + /* (3) Compare to Buffer1 */ 406 + addr = pageaddr << priv->page_offset; 407 + command[0] = OP_COMPARE_BUF1; 408 + command[1] = (addr & 0x00FF0000) >> 16; 409 + command[2] = (addr & 0x0000FF00) >> 8; 410 + command[3] = 0; 411 + 412 + DEBUG(MTD_DEBUG_LEVEL3, "COMPARE: (%x) %x %x %x\n", 413 + command[0], command[1], command[2], command[3]); 414 + 415 + status = spi_sync(spi, &msg); 416 + if (status < 0) 417 + DEBUG(MTD_DEBUG_LEVEL1, "%s: compare %u -> %d \n", 418 + spi->dev.bus_id, addr, status); 419 + 420 + status = dataflash_waitready(priv->spi); 421 + 422 + /* Check result of the compare operation */ 423 + if ((status & (1 << 6)) == 1) { 424 + printk(KERN_ERR "%s: compare page %u, err %d\n", 425 + spi->dev.bus_id, pageaddr, status); 426 + remaining = 0; 427 + status = -EIO; 428 + break; 429 + } else 430 + status = 0; 431 + 432 + #endif /* CONFIG_DATAFLASH_WRITE_VERIFY */ 433 + 434 + remaining = remaining - writelen; 435 + pageaddr++; 436 + offset = 0; 437 + writebuf += writelen; 438 + *retlen += writelen; 439 + 440 + if (remaining > priv->page_size) 441 + writelen = priv->page_size; 442 + else 443 + writelen = remaining; 444 + } 445 + up(&priv->lock); 446 + 447 + return status; 448 + } 449 + 450 + /* ......................................................................... */ 451 + 452 + /* 453 + * Register DataFlash device with MTD subsystem. 454 + */ 455 + static int __devinit 456 + add_dataflash(struct spi_device *spi, char *name, 457 + int nr_pages, int pagesize, int pageoffset) 458 + { 459 + struct dataflash *priv; 460 + struct mtd_info *device; 461 + struct flash_platform_data *pdata = spi->dev.platform_data; 462 + 463 + priv = (struct dataflash *) kzalloc(sizeof *priv, GFP_KERNEL); 464 + if (!priv) 465 + return -ENOMEM; 466 + 467 + init_MUTEX(&priv->lock); 468 + priv->spi = spi; 469 + priv->page_size = pagesize; 470 + priv->page_offset = pageoffset; 471 + 472 + /* name must be usable with cmdlinepart */ 473 + sprintf(priv->name, "spi%d.%d-%s", 474 + spi->master->bus_num, spi->chip_select, 475 + name); 476 + 477 + device = &priv->mtd; 478 + device->name = (pdata && pdata->name) ? pdata->name : priv->name; 479 + device->size = nr_pages * pagesize; 480 + device->erasesize = pagesize; 481 + device->owner = THIS_MODULE; 482 + device->type = MTD_DATAFLASH; 483 + device->flags = MTD_CAP_NORFLASH; 484 + device->erase = dataflash_erase; 485 + device->read = dataflash_read; 486 + device->write = dataflash_write; 487 + device->priv = priv; 488 + 489 + dev_info(&spi->dev, "%s (%d KBytes)\n", name, device->size/1024); 490 + dev_set_drvdata(&spi->dev, priv); 491 + 492 + if (mtd_has_partitions()) { 493 + struct mtd_partition *parts; 494 + int nr_parts = 0; 495 + 496 + #ifdef CONFIG_MTD_CMDLINE_PARTS 497 + static const char *part_probes[] = { "cmdlinepart", NULL, }; 498 + 499 + nr_parts = parse_mtd_partitions(device, part_probes, &parts, 0); 500 + #endif 501 + 502 + if (nr_parts <= 0 && pdata && pdata->parts) { 503 + parts = pdata->parts; 504 + nr_parts = pdata->nr_parts; 505 + } 506 + 507 + if (nr_parts > 0) { 508 + priv->partitioned = 1; 509 + return add_mtd_partitions(device, parts, nr_parts); 510 + } 511 + } else if (pdata && pdata->nr_parts) 512 + dev_warn(&spi->dev, "ignoring %d default partitions on %s\n", 513 + pdata->nr_parts, device->name); 514 + 515 + return add_mtd_device(device) == 1 ? -ENODEV : 0; 516 + } 517 + 518 + /* 519 + * Detect and initialize DataFlash device: 520 + * 521 + * Device Density ID code #Pages PageSize Offset 522 + * AT45DB011B 1Mbit (128K) xx0011xx (0x0c) 512 264 9 523 + * AT45DB021B 2Mbit (256K) xx0101xx (0x14) 1025 264 9 524 + * AT45DB041B 4Mbit (512K) xx0111xx (0x1c) 2048 264 9 525 + * AT45DB081B 8Mbit (1M) xx1001xx (0x24) 4096 264 9 526 + * AT45DB0161B 16Mbit (2M) xx1011xx (0x2c) 4096 528 10 527 + * AT45DB0321B 32Mbit (4M) xx1101xx (0x34) 8192 528 10 528 + * AT45DB0642 64Mbit (8M) xx111xxx (0x3c) 8192 1056 11 529 + * AT45DB1282 128Mbit (16M) xx0100xx (0x10) 16384 1056 11 530 + */ 531 + static int __devinit dataflash_probe(struct spi_device *spi) 532 + { 533 + int status; 534 + 535 + status = dataflash_status(spi); 536 + if (status <= 0 || status == 0xff) { 537 + DEBUG(MTD_DEBUG_LEVEL1, "%s: status error %d\n", 538 + spi->dev.bus_id, status); 539 + if (status == 0xff) 540 + status = -ENODEV; 541 + return status; 542 + } 543 + 544 + /* if there's a device there, assume it's dataflash. 545 + * board setup should have set spi->max_speed_max to 546 + * match f(car) for continuous reads, mode 0 or 3. 547 + */ 548 + switch (status & 0x3c) { 549 + case 0x0c: /* 0 0 1 1 x x */ 550 + status = add_dataflash(spi, "AT45DB011B", 512, 264, 9); 551 + break; 552 + case 0x14: /* 0 1 0 1 x x */ 553 + status = add_dataflash(spi, "AT45DB021B", 1025, 264, 9); 554 + break; 555 + case 0x1c: /* 0 1 1 1 x x */ 556 + status = add_dataflash(spi, "AT45DB041x", 2048, 264, 9); 557 + break; 558 + case 0x24: /* 1 0 0 1 x x */ 559 + status = add_dataflash(spi, "AT45DB081B", 4096, 264, 9); 560 + break; 561 + case 0x2c: /* 1 0 1 1 x x */ 562 + status = add_dataflash(spi, "AT45DB161x", 4096, 528, 10); 563 + break; 564 + case 0x34: /* 1 1 0 1 x x */ 565 + status = add_dataflash(spi, "AT45DB321x", 8192, 528, 10); 566 + break; 567 + case 0x38: /* 1 1 1 x x x */ 568 + case 0x3c: 569 + status = add_dataflash(spi, "AT45DB642x", 8192, 1056, 11); 570 + break; 571 + /* obsolete AT45DB1282 not (yet?) supported */ 572 + default: 573 + DEBUG(MTD_DEBUG_LEVEL1, "%s: unsupported device (%x)\n", 574 + spi->dev.bus_id, status & 0x3c); 575 + status = -ENODEV; 576 + } 577 + 578 + if (status < 0) 579 + DEBUG(MTD_DEBUG_LEVEL1, "%s: add_dataflash --> %d\n", 580 + spi->dev.bus_id, status); 581 + 582 + return status; 583 + } 584 + 585 + static int __devexit dataflash_remove(struct spi_device *spi) 586 + { 587 + struct dataflash *flash = dev_get_drvdata(&spi->dev); 588 + int status; 589 + 590 + DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", spi->dev.bus_id); 591 + 592 + if (mtd_has_partitions() && flash->partitioned) 593 + status = del_mtd_partitions(&flash->mtd); 594 + else 595 + status = del_mtd_device(&flash->mtd); 596 + if (status == 0) 597 + kfree(flash); 598 + return status; 599 + } 600 + 601 + static struct spi_driver dataflash_driver = { 602 + .driver = { 603 + .name = "mtd_dataflash", 604 + .bus = &spi_bus_type, 605 + .owner = THIS_MODULE, 606 + }, 607 + 608 + .probe = dataflash_probe, 609 + .remove = __devexit_p(dataflash_remove), 610 + 611 + /* FIXME: investigate suspend and resume... */ 612 + }; 613 + 614 + static int __init dataflash_init(void) 615 + { 616 + return spi_register_driver(&dataflash_driver); 617 + } 618 + module_init(dataflash_init); 619 + 620 + static void __exit dataflash_exit(void) 621 + { 622 + spi_unregister_driver(&dataflash_driver); 623 + } 624 + module_exit(dataflash_exit); 625 + 626 + 627 + MODULE_LICENSE("GPL"); 628 + MODULE_AUTHOR("Andrew Victor, David Brownell"); 629 + MODULE_DESCRIPTION("MTD DataFlash driver");
+109
drivers/spi/Kconfig
···
··· 1 + # 2 + # SPI driver configuration 3 + # 4 + # NOTE: the reason this doesn't show SPI slave support is mostly that 5 + # nobody's needed a slave side API yet. The master-role API is not 6 + # fully appropriate there, so it'd need some thought to do well. 7 + # 8 + menu "SPI support" 9 + 10 + config SPI 11 + bool "SPI support" 12 + help 13 + The "Serial Peripheral Interface" is a low level synchronous 14 + protocol. Chips that support SPI can have data transfer rates 15 + up to several tens of Mbit/sec. Chips are addressed with a 16 + controller and a chipselect. Most SPI slaves don't support 17 + dynamic device discovery; some are even write-only or read-only. 18 + 19 + SPI is widely used by microcontollers to talk with sensors, 20 + eeprom and flash memory, codecs and various other controller 21 + chips, analog to digital (and d-to-a) converters, and more. 22 + MMC and SD cards can be accessed using SPI protocol; and for 23 + DataFlash cards used in MMC sockets, SPI must always be used. 24 + 25 + SPI is one of a family of similar protocols using a four wire 26 + interface (select, clock, data in, data out) including Microwire 27 + (half duplex), SSP, SSI, and PSP. This driver framework should 28 + work with most such devices and controllers. 29 + 30 + config SPI_DEBUG 31 + boolean "Debug support for SPI drivers" 32 + depends on SPI && DEBUG_KERNEL 33 + help 34 + Say "yes" to enable debug messaging (like dev_dbg and pr_debug), 35 + sysfs, and debugfs support in SPI controller and protocol drivers. 36 + 37 + # 38 + # MASTER side ... talking to discrete SPI slave chips including microcontrollers 39 + # 40 + 41 + config SPI_MASTER 42 + # boolean "SPI Master Support" 43 + boolean 44 + default SPI 45 + help 46 + If your system has an master-capable SPI controller (which 47 + provides the clock and chipselect), you can enable that 48 + controller and the protocol drivers for the SPI slave chips 49 + that are connected. 50 + 51 + comment "SPI Master Controller Drivers" 52 + depends on SPI_MASTER 53 + 54 + config SPI_BITBANG 55 + tristate "Bitbanging SPI master" 56 + depends on SPI_MASTER && EXPERIMENTAL 57 + help 58 + With a few GPIO pins, your system can bitbang the SPI protocol. 59 + Select this to get SPI support through I/O pins (GPIO, parallel 60 + port, etc). Or, some systems' SPI master controller drivers use 61 + this code to manage the per-word or per-transfer accesses to the 62 + hardware shift registers. 63 + 64 + This is library code, and is automatically selected by drivers that 65 + need it. You only need to select this explicitly to support driver 66 + modules that aren't part of this kernel tree. 67 + 68 + config SPI_BUTTERFLY 69 + tristate "Parallel port adapter for AVR Butterfly (DEVELOPMENT)" 70 + depends on SPI_MASTER && PARPORT && EXPERIMENTAL 71 + select SPI_BITBANG 72 + help 73 + This uses a custom parallel port cable to connect to an AVR 74 + Butterfly <http://www.atmel.com/products/avr/butterfly>, an 75 + inexpensive battery powered microcontroller evaluation board. 76 + This same cable can be used to flash new firmware. 77 + 78 + config SPI_BUTTERFLY 79 + tristate "Parallel port adapter for AVR Butterfly (DEVELOPMENT)" 80 + depends on SPI_MASTER && PARPORT && EXPERIMENTAL 81 + select SPI_BITBANG 82 + help 83 + This uses a custom parallel port cable to connect to an AVR 84 + Butterfly <http://www.atmel.com/products/avr/butterfly>, an 85 + inexpensive battery powered microcontroller evaluation board. 86 + This same cable can be used to flash new firmware. 87 + 88 + # 89 + # Add new SPI master controllers in alphabetical order above this line 90 + # 91 + 92 + 93 + # 94 + # There are lots of SPI device types, with sensors and memory 95 + # being probably the most widely used ones. 96 + # 97 + comment "SPI Protocol Masters" 98 + depends on SPI_MASTER 99 + 100 + 101 + # 102 + # Add new SPI protocol masters in alphabetical order above this line 103 + # 104 + 105 + 106 + # (slave support would go here) 107 + 108 + endmenu # "SPI support" 109 +
+25
drivers/spi/Makefile
···
··· 1 + # 2 + # Makefile for kernel SPI drivers. 3 + # 4 + 5 + ifeq ($(CONFIG_SPI_DEBUG),y) 6 + EXTRA_CFLAGS += -DDEBUG 7 + endif 8 + 9 + # small core, mostly translating board-specific 10 + # config declarations into driver model code 11 + obj-$(CONFIG_SPI_MASTER) += spi.o 12 + 13 + # SPI master controller drivers (bus) 14 + obj-$(CONFIG_SPI_BITBANG) += spi_bitbang.o 15 + obj-$(CONFIG_SPI_BUTTERFLY) += spi_butterfly.o 16 + # ... add above this line ... 17 + 18 + # SPI protocol drivers (device/link on bus) 19 + # ... add above this line ... 20 + 21 + # SPI slave controller drivers (upstream link) 22 + # ... add above this line ... 23 + 24 + # SPI slave drivers (protocol for that link) 25 + # ... add above this line ...
+642
drivers/spi/spi.c
···
··· 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 + 21 + #include <linux/autoconf.h> 22 + #include <linux/kernel.h> 23 + #include <linux/device.h> 24 + #include <linux/init.h> 25 + #include <linux/cache.h> 26 + #include <linux/spi/spi.h> 27 + 28 + 29 + /* SPI bustype and spi_master class are registered after board init code 30 + * provides the SPI device tables, ensuring that both are present by the 31 + * time controller driver registration causes spi_devices to "enumerate". 32 + */ 33 + static void spidev_release(struct device *dev) 34 + { 35 + const struct spi_device *spi = to_spi_device(dev); 36 + 37 + /* spi masters may cleanup for released devices */ 38 + if (spi->master->cleanup) 39 + spi->master->cleanup(spi); 40 + 41 + spi_master_put(spi->master); 42 + kfree(dev); 43 + } 44 + 45 + static ssize_t 46 + modalias_show(struct device *dev, struct device_attribute *a, char *buf) 47 + { 48 + const struct spi_device *spi = to_spi_device(dev); 49 + 50 + return snprintf(buf, BUS_ID_SIZE + 1, "%s\n", spi->modalias); 51 + } 52 + 53 + static struct device_attribute spi_dev_attrs[] = { 54 + __ATTR_RO(modalias), 55 + __ATTR_NULL, 56 + }; 57 + 58 + /* modalias support makes "modprobe $MODALIAS" new-style hotplug work, 59 + * and the sysfs version makes coldplug work too. 60 + */ 61 + 62 + static int spi_match_device(struct device *dev, struct device_driver *drv) 63 + { 64 + const struct spi_device *spi = to_spi_device(dev); 65 + 66 + return strncmp(spi->modalias, drv->name, BUS_ID_SIZE) == 0; 67 + } 68 + 69 + static int spi_uevent(struct device *dev, char **envp, int num_envp, 70 + char *buffer, int buffer_size) 71 + { 72 + const struct spi_device *spi = to_spi_device(dev); 73 + 74 + envp[0] = buffer; 75 + snprintf(buffer, buffer_size, "MODALIAS=%s", spi->modalias); 76 + envp[1] = NULL; 77 + return 0; 78 + } 79 + 80 + #ifdef CONFIG_PM 81 + 82 + /* 83 + * NOTE: the suspend() method for an spi_master controller driver 84 + * should verify that all its child devices are marked as suspended; 85 + * suspend requests delivered through sysfs power/state files don't 86 + * enforce such constraints. 87 + */ 88 + static int spi_suspend(struct device *dev, pm_message_t message) 89 + { 90 + int value; 91 + struct spi_driver *drv = to_spi_driver(dev->driver); 92 + 93 + if (!drv->suspend) 94 + return 0; 95 + 96 + /* suspend will stop irqs and dma; no more i/o */ 97 + value = drv->suspend(to_spi_device(dev), message); 98 + if (value == 0) 99 + dev->power.power_state = message; 100 + return value; 101 + } 102 + 103 + static int spi_resume(struct device *dev) 104 + { 105 + int value; 106 + struct spi_driver *drv = to_spi_driver(dev->driver); 107 + 108 + if (!drv->resume) 109 + return 0; 110 + 111 + /* resume may restart the i/o queue */ 112 + value = drv->resume(to_spi_device(dev)); 113 + if (value == 0) 114 + dev->power.power_state = PMSG_ON; 115 + return value; 116 + } 117 + 118 + #else 119 + #define spi_suspend NULL 120 + #define spi_resume NULL 121 + #endif 122 + 123 + struct bus_type spi_bus_type = { 124 + .name = "spi", 125 + .dev_attrs = spi_dev_attrs, 126 + .match = spi_match_device, 127 + .uevent = spi_uevent, 128 + .suspend = spi_suspend, 129 + .resume = spi_resume, 130 + }; 131 + EXPORT_SYMBOL_GPL(spi_bus_type); 132 + 133 + 134 + static int spi_drv_probe(struct device *dev) 135 + { 136 + const struct spi_driver *sdrv = to_spi_driver(dev->driver); 137 + 138 + return sdrv->probe(to_spi_device(dev)); 139 + } 140 + 141 + static int spi_drv_remove(struct device *dev) 142 + { 143 + const struct spi_driver *sdrv = to_spi_driver(dev->driver); 144 + 145 + return sdrv->remove(to_spi_device(dev)); 146 + } 147 + 148 + static void spi_drv_shutdown(struct device *dev) 149 + { 150 + const struct spi_driver *sdrv = to_spi_driver(dev->driver); 151 + 152 + sdrv->shutdown(to_spi_device(dev)); 153 + } 154 + 155 + int spi_register_driver(struct spi_driver *sdrv) 156 + { 157 + sdrv->driver.bus = &spi_bus_type; 158 + if (sdrv->probe) 159 + sdrv->driver.probe = spi_drv_probe; 160 + if (sdrv->remove) 161 + sdrv->driver.remove = spi_drv_remove; 162 + if (sdrv->shutdown) 163 + sdrv->driver.shutdown = spi_drv_shutdown; 164 + return driver_register(&sdrv->driver); 165 + } 166 + EXPORT_SYMBOL_GPL(spi_register_driver); 167 + 168 + /*-------------------------------------------------------------------------*/ 169 + 170 + /* SPI devices should normally not be created by SPI device drivers; that 171 + * would make them board-specific. Similarly with SPI master drivers. 172 + * Device registration normally goes into like arch/.../mach.../board-YYY.c 173 + * with other readonly (flashable) information about mainboard devices. 174 + */ 175 + 176 + struct boardinfo { 177 + struct list_head list; 178 + unsigned n_board_info; 179 + struct spi_board_info board_info[0]; 180 + }; 181 + 182 + static LIST_HEAD(board_list); 183 + static DECLARE_MUTEX(board_lock); 184 + 185 + 186 + /* On typical mainboards, this is purely internal; and it's not needed 187 + * after board init creates the hard-wired devices. Some development 188 + * platforms may not be able to use spi_register_board_info though, and 189 + * this is exported so that for example a USB or parport based adapter 190 + * driver could add devices (which it would learn about out-of-band). 191 + */ 192 + struct spi_device *__init_or_module 193 + spi_new_device(struct spi_master *master, struct spi_board_info *chip) 194 + { 195 + struct spi_device *proxy; 196 + struct device *dev = master->cdev.dev; 197 + int status; 198 + 199 + /* NOTE: caller did any chip->bus_num checks necessary */ 200 + 201 + if (!spi_master_get(master)) 202 + return NULL; 203 + 204 + proxy = kzalloc(sizeof *proxy, GFP_KERNEL); 205 + if (!proxy) { 206 + dev_err(dev, "can't alloc dev for cs%d\n", 207 + chip->chip_select); 208 + goto fail; 209 + } 210 + proxy->master = master; 211 + proxy->chip_select = chip->chip_select; 212 + proxy->max_speed_hz = chip->max_speed_hz; 213 + proxy->irq = chip->irq; 214 + proxy->modalias = chip->modalias; 215 + 216 + snprintf(proxy->dev.bus_id, sizeof proxy->dev.bus_id, 217 + "%s.%u", master->cdev.class_id, 218 + chip->chip_select); 219 + proxy->dev.parent = dev; 220 + proxy->dev.bus = &spi_bus_type; 221 + proxy->dev.platform_data = (void *) chip->platform_data; 222 + proxy->controller_data = chip->controller_data; 223 + proxy->controller_state = NULL; 224 + proxy->dev.release = spidev_release; 225 + 226 + /* drivers may modify this default i/o setup */ 227 + status = master->setup(proxy); 228 + if (status < 0) { 229 + dev_dbg(dev, "can't %s %s, status %d\n", 230 + "setup", proxy->dev.bus_id, status); 231 + goto fail; 232 + } 233 + 234 + /* driver core catches callers that misbehave by defining 235 + * devices that already exist. 236 + */ 237 + status = device_register(&proxy->dev); 238 + if (status < 0) { 239 + dev_dbg(dev, "can't %s %s, status %d\n", 240 + "add", proxy->dev.bus_id, status); 241 + goto fail; 242 + } 243 + dev_dbg(dev, "registered child %s\n", proxy->dev.bus_id); 244 + return proxy; 245 + 246 + fail: 247 + spi_master_put(master); 248 + kfree(proxy); 249 + return NULL; 250 + } 251 + EXPORT_SYMBOL_GPL(spi_new_device); 252 + 253 + /* 254 + * Board-specific early init code calls this (probably during arch_initcall) 255 + * with segments of the SPI device table. Any device nodes are created later, 256 + * after the relevant parent SPI controller (bus_num) is defined. We keep 257 + * this table of devices forever, so that reloading a controller driver will 258 + * not make Linux forget about these hard-wired devices. 259 + * 260 + * Other code can also call this, e.g. a particular add-on board might provide 261 + * SPI devices through its expansion connector, so code initializing that board 262 + * would naturally declare its SPI devices. 263 + * 264 + * The board info passed can safely be __initdata ... but be careful of 265 + * any embedded pointers (platform_data, etc), they're copied as-is. 266 + */ 267 + int __init 268 + spi_register_board_info(struct spi_board_info const *info, unsigned n) 269 + { 270 + struct boardinfo *bi; 271 + 272 + bi = kmalloc(sizeof(*bi) + n * sizeof *info, GFP_KERNEL); 273 + if (!bi) 274 + return -ENOMEM; 275 + bi->n_board_info = n; 276 + memcpy(bi->board_info, info, n * sizeof *info); 277 + 278 + down(&board_lock); 279 + list_add_tail(&bi->list, &board_list); 280 + up(&board_lock); 281 + return 0; 282 + } 283 + EXPORT_SYMBOL_GPL(spi_register_board_info); 284 + 285 + /* FIXME someone should add support for a __setup("spi", ...) that 286 + * creates board info from kernel command lines 287 + */ 288 + 289 + static void __init_or_module 290 + scan_boardinfo(struct spi_master *master) 291 + { 292 + struct boardinfo *bi; 293 + struct device *dev = master->cdev.dev; 294 + 295 + down(&board_lock); 296 + list_for_each_entry(bi, &board_list, list) { 297 + struct spi_board_info *chip = bi->board_info; 298 + unsigned n; 299 + 300 + for (n = bi->n_board_info; n > 0; n--, chip++) { 301 + if (chip->bus_num != master->bus_num) 302 + continue; 303 + /* some controllers only have one chip, so they 304 + * might not use chipselects. otherwise, the 305 + * chipselects are numbered 0..max. 306 + */ 307 + if (chip->chip_select >= master->num_chipselect 308 + && master->num_chipselect) { 309 + dev_dbg(dev, "cs%d > max %d\n", 310 + chip->chip_select, 311 + master->num_chipselect); 312 + continue; 313 + } 314 + (void) spi_new_device(master, chip); 315 + } 316 + } 317 + up(&board_lock); 318 + } 319 + 320 + /*-------------------------------------------------------------------------*/ 321 + 322 + static void spi_master_release(struct class_device *cdev) 323 + { 324 + struct spi_master *master; 325 + 326 + master = container_of(cdev, struct spi_master, cdev); 327 + kfree(master); 328 + } 329 + 330 + static struct class spi_master_class = { 331 + .name = "spi_master", 332 + .owner = THIS_MODULE, 333 + .release = spi_master_release, 334 + }; 335 + 336 + 337 + /** 338 + * spi_alloc_master - allocate SPI master controller 339 + * @dev: the controller, possibly using the platform_bus 340 + * @size: how much driver-private data to preallocate; the pointer to this 341 + * memory is in the class_data field of the returned class_device, 342 + * accessible with spi_master_get_devdata(). 343 + * 344 + * This call is used only by SPI master controller drivers, which are the 345 + * only ones directly touching chip registers. It's how they allocate 346 + * an spi_master structure, prior to calling spi_add_master(). 347 + * 348 + * This must be called from context that can sleep. It returns the SPI 349 + * master structure on success, else NULL. 350 + * 351 + * The caller is responsible for assigning the bus number and initializing 352 + * the master's methods before calling spi_add_master(); and (after errors 353 + * adding the device) calling spi_master_put() to prevent a memory leak. 354 + */ 355 + struct spi_master * __init_or_module 356 + spi_alloc_master(struct device *dev, unsigned size) 357 + { 358 + struct spi_master *master; 359 + 360 + if (!dev) 361 + return NULL; 362 + 363 + master = kzalloc(size + sizeof *master, SLAB_KERNEL); 364 + if (!master) 365 + return NULL; 366 + 367 + class_device_initialize(&master->cdev); 368 + master->cdev.class = &spi_master_class; 369 + master->cdev.dev = get_device(dev); 370 + spi_master_set_devdata(master, &master[1]); 371 + 372 + return master; 373 + } 374 + EXPORT_SYMBOL_GPL(spi_alloc_master); 375 + 376 + /** 377 + * spi_register_master - register SPI master controller 378 + * @master: initialized master, originally from spi_alloc_master() 379 + * 380 + * SPI master controllers connect to their drivers using some non-SPI bus, 381 + * such as the platform bus. The final stage of probe() in that code 382 + * includes calling spi_register_master() to hook up to this SPI bus glue. 383 + * 384 + * SPI controllers use board specific (often SOC specific) bus numbers, 385 + * and board-specific addressing for SPI devices combines those numbers 386 + * with chip select numbers. Since SPI does not directly support dynamic 387 + * device identification, boards need configuration tables telling which 388 + * chip is at which address. 389 + * 390 + * This must be called from context that can sleep. It returns zero on 391 + * success, else a negative error code (dropping the master's refcount). 392 + * After a successful return, the caller is responsible for calling 393 + * spi_unregister_master(). 394 + */ 395 + int __init_or_module 396 + spi_register_master(struct spi_master *master) 397 + { 398 + static atomic_t dyn_bus_id = ATOMIC_INIT(0); 399 + struct device *dev = master->cdev.dev; 400 + int status = -ENODEV; 401 + int dynamic = 0; 402 + 403 + if (!dev) 404 + return -ENODEV; 405 + 406 + /* convention: dynamically assigned bus IDs count down from the max */ 407 + if (master->bus_num == 0) { 408 + master->bus_num = atomic_dec_return(&dyn_bus_id); 409 + dynamic = 1; 410 + } 411 + 412 + /* register the device, then userspace will see it. 413 + * registration fails if the bus ID is in use. 414 + */ 415 + snprintf(master->cdev.class_id, sizeof master->cdev.class_id, 416 + "spi%u", master->bus_num); 417 + status = class_device_add(&master->cdev); 418 + if (status < 0) 419 + goto done; 420 + dev_dbg(dev, "registered master %s%s\n", master->cdev.class_id, 421 + dynamic ? " (dynamic)" : ""); 422 + 423 + /* populate children from any spi device tables */ 424 + scan_boardinfo(master); 425 + status = 0; 426 + done: 427 + return status; 428 + } 429 + EXPORT_SYMBOL_GPL(spi_register_master); 430 + 431 + 432 + static int __unregister(struct device *dev, void *unused) 433 + { 434 + /* note: before about 2.6.14-rc1 this would corrupt memory: */ 435 + spi_unregister_device(to_spi_device(dev)); 436 + return 0; 437 + } 438 + 439 + /** 440 + * spi_unregister_master - unregister SPI master controller 441 + * @master: the master being unregistered 442 + * 443 + * This call is used only by SPI master controller drivers, which are the 444 + * only ones directly touching chip registers. 445 + * 446 + * This must be called from context that can sleep. 447 + */ 448 + void spi_unregister_master(struct spi_master *master) 449 + { 450 + (void) device_for_each_child(master->cdev.dev, NULL, __unregister); 451 + class_device_unregister(&master->cdev); 452 + master->cdev.dev = NULL; 453 + } 454 + EXPORT_SYMBOL_GPL(spi_unregister_master); 455 + 456 + /** 457 + * spi_busnum_to_master - look up master associated with bus_num 458 + * @bus_num: the master's bus number 459 + * 460 + * This call may be used with devices that are registered after 461 + * arch init time. It returns a refcounted pointer to the relevant 462 + * spi_master (which the caller must release), or NULL if there is 463 + * no such master registered. 464 + */ 465 + struct spi_master *spi_busnum_to_master(u16 bus_num) 466 + { 467 + if (bus_num) { 468 + char name[8]; 469 + struct kobject *bus; 470 + 471 + snprintf(name, sizeof name, "spi%u", bus_num); 472 + bus = kset_find_obj(&spi_master_class.subsys.kset, name); 473 + if (bus) 474 + return container_of(bus, struct spi_master, cdev.kobj); 475 + } 476 + return NULL; 477 + } 478 + EXPORT_SYMBOL_GPL(spi_busnum_to_master); 479 + 480 + 481 + /*-------------------------------------------------------------------------*/ 482 + 483 + static void spi_complete(void *arg) 484 + { 485 + complete(arg); 486 + } 487 + 488 + /** 489 + * spi_sync - blocking/synchronous SPI data transfers 490 + * @spi: device with which data will be exchanged 491 + * @message: describes the data transfers 492 + * 493 + * This call may only be used from a context that may sleep. The sleep 494 + * is non-interruptible, and has no timeout. Low-overhead controller 495 + * drivers may DMA directly into and out of the message buffers. 496 + * 497 + * Note that the SPI device's chip select is active during the message, 498 + * and then is normally disabled between messages. Drivers for some 499 + * frequently-used devices may want to minimize costs of selecting a chip, 500 + * by leaving it selected in anticipation that the next message will go 501 + * to the same chip. (That may increase power usage.) 502 + * 503 + * Also, the caller is guaranteeing that the memory associated with the 504 + * message will not be freed before this call returns. 505 + * 506 + * The return value is a negative error code if the message could not be 507 + * submitted, else zero. When the value is zero, then message->status is 508 + * also defined: it's the completion code for the transfer, either zero 509 + * or a negative error code from the controller driver. 510 + */ 511 + int spi_sync(struct spi_device *spi, struct spi_message *message) 512 + { 513 + DECLARE_COMPLETION(done); 514 + int status; 515 + 516 + message->complete = spi_complete; 517 + message->context = &done; 518 + status = spi_async(spi, message); 519 + if (status == 0) 520 + wait_for_completion(&done); 521 + message->context = NULL; 522 + return status; 523 + } 524 + EXPORT_SYMBOL_GPL(spi_sync); 525 + 526 + #define SPI_BUFSIZ (SMP_CACHE_BYTES) 527 + 528 + static u8 *buf; 529 + 530 + /** 531 + * spi_write_then_read - SPI synchronous write followed by read 532 + * @spi: device with which data will be exchanged 533 + * @txbuf: data to be written (need not be dma-safe) 534 + * @n_tx: size of txbuf, in bytes 535 + * @rxbuf: buffer into which data will be read 536 + * @n_rx: size of rxbuf, in bytes (need not be dma-safe) 537 + * 538 + * This performs a half duplex MicroWire style transaction with the 539 + * device, sending txbuf and then reading rxbuf. The return value 540 + * is zero for success, else a negative errno status code. 541 + * This call may only be used from a context that may sleep. 542 + * 543 + * Parameters to this routine are always copied using a small buffer; 544 + * performance-sensitive or bulk transfer code should instead use 545 + * spi_{async,sync}() calls with dma-safe buffers. 546 + */ 547 + int spi_write_then_read(struct spi_device *spi, 548 + const u8 *txbuf, unsigned n_tx, 549 + u8 *rxbuf, unsigned n_rx) 550 + { 551 + static DECLARE_MUTEX(lock); 552 + 553 + int status; 554 + struct spi_message message; 555 + struct spi_transfer x[2]; 556 + u8 *local_buf; 557 + 558 + /* Use preallocated DMA-safe buffer. We can't avoid copying here, 559 + * (as a pure convenience thing), but we can keep heap costs 560 + * out of the hot path ... 561 + */ 562 + if ((n_tx + n_rx) > SPI_BUFSIZ) 563 + return -EINVAL; 564 + 565 + spi_message_init(&message); 566 + memset(x, 0, sizeof x); 567 + if (n_tx) { 568 + x[0].len = n_tx; 569 + spi_message_add_tail(&x[0], &message); 570 + } 571 + if (n_rx) { 572 + x[1].len = n_rx; 573 + spi_message_add_tail(&x[1], &message); 574 + } 575 + 576 + /* ... unless someone else is using the pre-allocated buffer */ 577 + if (down_trylock(&lock)) { 578 + local_buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL); 579 + if (!local_buf) 580 + return -ENOMEM; 581 + } else 582 + local_buf = buf; 583 + 584 + memcpy(local_buf, txbuf, n_tx); 585 + x[0].tx_buf = local_buf; 586 + x[1].rx_buf = local_buf + n_tx; 587 + 588 + /* do the i/o */ 589 + status = spi_sync(spi, &message); 590 + if (status == 0) { 591 + memcpy(rxbuf, x[1].rx_buf, n_rx); 592 + status = message.status; 593 + } 594 + 595 + if (x[0].tx_buf == buf) 596 + up(&lock); 597 + else 598 + kfree(local_buf); 599 + 600 + return status; 601 + } 602 + EXPORT_SYMBOL_GPL(spi_write_then_read); 603 + 604 + /*-------------------------------------------------------------------------*/ 605 + 606 + static int __init spi_init(void) 607 + { 608 + int status; 609 + 610 + buf = kmalloc(SPI_BUFSIZ, SLAB_KERNEL); 611 + if (!buf) { 612 + status = -ENOMEM; 613 + goto err0; 614 + } 615 + 616 + status = bus_register(&spi_bus_type); 617 + if (status < 0) 618 + goto err1; 619 + 620 + status = class_register(&spi_master_class); 621 + if (status < 0) 622 + goto err2; 623 + return 0; 624 + 625 + err2: 626 + bus_unregister(&spi_bus_type); 627 + err1: 628 + kfree(buf); 629 + buf = NULL; 630 + err0: 631 + return status; 632 + } 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); 642 +
+472
drivers/spi/spi_bitbang.c
···
··· 1 + /* 2 + * spi_bitbang.c - polling/bitbanging SPI master controller driver utilities 3 + * 4 + * This program is free software; you can redistribute it and/or modify 5 + * it under the terms of the GNU General Public License as published by 6 + * the Free Software Foundation; either version 2 of the License, or 7 + * (at your option) any later version. 8 + * 9 + * This program is distributed in the hope that it will be useful, 10 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 + * GNU General Public License for more details. 13 + * 14 + * You should have received a copy of the GNU General Public License 15 + * along with this program; if not, write to the Free Software 16 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 + */ 18 + 19 + #include <linux/config.h> 20 + #include <linux/init.h> 21 + #include <linux/spinlock.h> 22 + #include <linux/workqueue.h> 23 + #include <linux/interrupt.h> 24 + #include <linux/delay.h> 25 + #include <linux/errno.h> 26 + #include <linux/platform_device.h> 27 + 28 + #include <linux/spi/spi.h> 29 + #include <linux/spi/spi_bitbang.h> 30 + 31 + 32 + /*----------------------------------------------------------------------*/ 33 + 34 + /* 35 + * FIRST PART (OPTIONAL): word-at-a-time spi_transfer support. 36 + * Use this for GPIO or shift-register level hardware APIs. 37 + * 38 + * spi_bitbang_cs is in spi_device->controller_state, which is unavailable 39 + * to glue code. These bitbang setup() and cleanup() routines are always 40 + * used, though maybe they're called from controller-aware code. 41 + * 42 + * chipselect() and friends may use use spi_device->controller_data and 43 + * controller registers as appropriate. 44 + * 45 + * 46 + * NOTE: SPI controller pins can often be used as GPIO pins instead, 47 + * which means you could use a bitbang driver either to get hardware 48 + * working quickly, or testing for differences that aren't speed related. 49 + */ 50 + 51 + struct spi_bitbang_cs { 52 + unsigned nsecs; /* (clock cycle time)/2 */ 53 + u32 (*txrx_word)(struct spi_device *spi, unsigned nsecs, 54 + u32 word, u8 bits); 55 + unsigned (*txrx_bufs)(struct spi_device *, 56 + u32 (*txrx_word)( 57 + struct spi_device *spi, 58 + unsigned nsecs, 59 + u32 word, u8 bits), 60 + unsigned, struct spi_transfer *); 61 + }; 62 + 63 + static unsigned bitbang_txrx_8( 64 + struct spi_device *spi, 65 + u32 (*txrx_word)(struct spi_device *spi, 66 + unsigned nsecs, 67 + u32 word, u8 bits), 68 + unsigned ns, 69 + struct spi_transfer *t 70 + ) { 71 + unsigned bits = spi->bits_per_word; 72 + unsigned count = t->len; 73 + const u8 *tx = t->tx_buf; 74 + u8 *rx = t->rx_buf; 75 + 76 + while (likely(count > 0)) { 77 + u8 word = 0; 78 + 79 + if (tx) 80 + word = *tx++; 81 + word = txrx_word(spi, ns, word, bits); 82 + if (rx) 83 + *rx++ = word; 84 + count -= 1; 85 + } 86 + return t->len - count; 87 + } 88 + 89 + static unsigned bitbang_txrx_16( 90 + struct spi_device *spi, 91 + u32 (*txrx_word)(struct spi_device *spi, 92 + unsigned nsecs, 93 + u32 word, u8 bits), 94 + unsigned ns, 95 + struct spi_transfer *t 96 + ) { 97 + unsigned bits = spi->bits_per_word; 98 + unsigned count = t->len; 99 + const u16 *tx = t->tx_buf; 100 + u16 *rx = t->rx_buf; 101 + 102 + while (likely(count > 1)) { 103 + u16 word = 0; 104 + 105 + if (tx) 106 + word = *tx++; 107 + word = txrx_word(spi, ns, word, bits); 108 + if (rx) 109 + *rx++ = word; 110 + count -= 2; 111 + } 112 + return t->len - count; 113 + } 114 + 115 + static unsigned bitbang_txrx_32( 116 + struct spi_device *spi, 117 + u32 (*txrx_word)(struct spi_device *spi, 118 + unsigned nsecs, 119 + u32 word, u8 bits), 120 + unsigned ns, 121 + struct spi_transfer *t 122 + ) { 123 + unsigned bits = spi->bits_per_word; 124 + unsigned count = t->len; 125 + const u32 *tx = t->tx_buf; 126 + u32 *rx = t->rx_buf; 127 + 128 + while (likely(count > 3)) { 129 + u32 word = 0; 130 + 131 + if (tx) 132 + word = *tx++; 133 + word = txrx_word(spi, ns, word, bits); 134 + if (rx) 135 + *rx++ = word; 136 + count -= 4; 137 + } 138 + return t->len - count; 139 + } 140 + 141 + /** 142 + * spi_bitbang_setup - default setup for per-word I/O loops 143 + */ 144 + int spi_bitbang_setup(struct spi_device *spi) 145 + { 146 + struct spi_bitbang_cs *cs = spi->controller_state; 147 + struct spi_bitbang *bitbang; 148 + 149 + if (!spi->max_speed_hz) 150 + return -EINVAL; 151 + 152 + if (!cs) { 153 + cs = kzalloc(sizeof *cs, SLAB_KERNEL); 154 + if (!cs) 155 + return -ENOMEM; 156 + spi->controller_state = cs; 157 + } 158 + bitbang = spi_master_get_devdata(spi->master); 159 + 160 + if (!spi->bits_per_word) 161 + spi->bits_per_word = 8; 162 + 163 + /* spi_transfer level calls that work per-word */ 164 + if (spi->bits_per_word <= 8) 165 + cs->txrx_bufs = bitbang_txrx_8; 166 + else if (spi->bits_per_word <= 16) 167 + cs->txrx_bufs = bitbang_txrx_16; 168 + else if (spi->bits_per_word <= 32) 169 + cs->txrx_bufs = bitbang_txrx_32; 170 + else 171 + return -EINVAL; 172 + 173 + /* per-word shift register access, in hardware or bitbanging */ 174 + cs->txrx_word = bitbang->txrx_word[spi->mode & (SPI_CPOL|SPI_CPHA)]; 175 + if (!cs->txrx_word) 176 + return -EINVAL; 177 + 178 + /* nsecs = (clock period)/2 */ 179 + cs->nsecs = (1000000000/2) / (spi->max_speed_hz); 180 + if (cs->nsecs > MAX_UDELAY_MS * 1000) 181 + return -EINVAL; 182 + 183 + dev_dbg(&spi->dev, "%s, mode %d, %u bits/w, %u nsec\n", 184 + __FUNCTION__, spi->mode & (SPI_CPOL | SPI_CPHA), 185 + spi->bits_per_word, 2 * cs->nsecs); 186 + 187 + /* NOTE we _need_ to call chipselect() early, ideally with adapter 188 + * setup, unless the hardware defaults cooperate to avoid confusion 189 + * between normal (active low) and inverted chipselects. 190 + */ 191 + 192 + /* deselect chip (low or high) */ 193 + spin_lock(&bitbang->lock); 194 + if (!bitbang->busy) { 195 + bitbang->chipselect(spi, BITBANG_CS_INACTIVE); 196 + ndelay(cs->nsecs); 197 + } 198 + spin_unlock(&bitbang->lock); 199 + 200 + return 0; 201 + } 202 + EXPORT_SYMBOL_GPL(spi_bitbang_setup); 203 + 204 + /** 205 + * spi_bitbang_cleanup - default cleanup for per-word I/O loops 206 + */ 207 + void spi_bitbang_cleanup(const struct spi_device *spi) 208 + { 209 + kfree(spi->controller_state); 210 + } 211 + EXPORT_SYMBOL_GPL(spi_bitbang_cleanup); 212 + 213 + static int spi_bitbang_bufs(struct spi_device *spi, struct spi_transfer *t) 214 + { 215 + struct spi_bitbang_cs *cs = spi->controller_state; 216 + unsigned nsecs = cs->nsecs; 217 + 218 + return cs->txrx_bufs(spi, cs->txrx_word, nsecs, t); 219 + } 220 + 221 + /*----------------------------------------------------------------------*/ 222 + 223 + /* 224 + * SECOND PART ... simple transfer queue runner. 225 + * 226 + * This costs a task context per controller, running the queue by 227 + * performing each transfer in sequence. Smarter hardware can queue 228 + * several DMA transfers at once, and process several controller queues 229 + * in parallel; this driver doesn't match such hardware very well. 230 + * 231 + * Drivers can provide word-at-a-time i/o primitives, or provide 232 + * transfer-at-a-time ones to leverage dma or fifo hardware. 233 + */ 234 + static void bitbang_work(void *_bitbang) 235 + { 236 + struct spi_bitbang *bitbang = _bitbang; 237 + unsigned long flags; 238 + 239 + spin_lock_irqsave(&bitbang->lock, flags); 240 + bitbang->busy = 1; 241 + while (!list_empty(&bitbang->queue)) { 242 + struct spi_message *m; 243 + struct spi_device *spi; 244 + unsigned nsecs; 245 + struct spi_transfer *t = NULL; 246 + unsigned tmp; 247 + unsigned cs_change; 248 + int status; 249 + 250 + m = container_of(bitbang->queue.next, struct spi_message, 251 + queue); 252 + list_del_init(&m->queue); 253 + spin_unlock_irqrestore(&bitbang->lock, flags); 254 + 255 + /* FIXME this is made-up ... the correct value is known to 256 + * word-at-a-time bitbang code, and presumably chipselect() 257 + * should enforce these requirements too? 258 + */ 259 + nsecs = 100; 260 + 261 + spi = m->spi; 262 + tmp = 0; 263 + cs_change = 1; 264 + status = 0; 265 + 266 + list_for_each_entry (t, &m->transfers, transfer_list) { 267 + if (bitbang->shutdown) { 268 + status = -ESHUTDOWN; 269 + break; 270 + } 271 + 272 + /* set up default clock polarity, and activate chip; 273 + * this implicitly updates clock and spi modes as 274 + * previously recorded for this device via setup(). 275 + * (and also deselects any other chip that might be 276 + * selected ...) 277 + */ 278 + if (cs_change) { 279 + bitbang->chipselect(spi, BITBANG_CS_ACTIVE); 280 + ndelay(nsecs); 281 + } 282 + cs_change = t->cs_change; 283 + if (!t->tx_buf && !t->rx_buf && t->len) { 284 + status = -EINVAL; 285 + break; 286 + } 287 + 288 + /* transfer data. the lower level code handles any 289 + * new dma mappings it needs. our caller always gave 290 + * us dma-safe buffers. 291 + */ 292 + if (t->len) { 293 + /* REVISIT dma API still needs a designated 294 + * DMA_ADDR_INVALID; ~0 might be better. 295 + */ 296 + if (!m->is_dma_mapped) 297 + t->rx_dma = t->tx_dma = 0; 298 + status = bitbang->txrx_bufs(spi, t); 299 + } 300 + if (status != t->len) { 301 + if (status > 0) 302 + status = -EMSGSIZE; 303 + break; 304 + } 305 + m->actual_length += status; 306 + status = 0; 307 + 308 + /* protocol tweaks before next transfer */ 309 + if (t->delay_usecs) 310 + udelay(t->delay_usecs); 311 + 312 + if (!cs_change) 313 + continue; 314 + if (t->transfer_list.next == &m->transfers) 315 + break; 316 + 317 + /* sometimes a short mid-message deselect of the chip 318 + * may be needed to terminate a mode or command 319 + */ 320 + ndelay(nsecs); 321 + bitbang->chipselect(spi, BITBANG_CS_INACTIVE); 322 + ndelay(nsecs); 323 + } 324 + 325 + m->status = status; 326 + m->complete(m->context); 327 + 328 + /* normally deactivate chipselect ... unless no error and 329 + * cs_change has hinted that the next message will probably 330 + * be for this chip too. 331 + */ 332 + if (!(status == 0 && cs_change)) { 333 + ndelay(nsecs); 334 + bitbang->chipselect(spi, BITBANG_CS_INACTIVE); 335 + ndelay(nsecs); 336 + } 337 + 338 + spin_lock_irqsave(&bitbang->lock, flags); 339 + } 340 + bitbang->busy = 0; 341 + spin_unlock_irqrestore(&bitbang->lock, flags); 342 + } 343 + 344 + /** 345 + * spi_bitbang_transfer - default submit to transfer queue 346 + */ 347 + int spi_bitbang_transfer(struct spi_device *spi, struct spi_message *m) 348 + { 349 + struct spi_bitbang *bitbang; 350 + unsigned long flags; 351 + 352 + m->actual_length = 0; 353 + m->status = -EINPROGRESS; 354 + 355 + bitbang = spi_master_get_devdata(spi->master); 356 + if (bitbang->shutdown) 357 + return -ESHUTDOWN; 358 + 359 + spin_lock_irqsave(&bitbang->lock, flags); 360 + list_add_tail(&m->queue, &bitbang->queue); 361 + queue_work(bitbang->workqueue, &bitbang->work); 362 + spin_unlock_irqrestore(&bitbang->lock, flags); 363 + 364 + return 0; 365 + } 366 + EXPORT_SYMBOL_GPL(spi_bitbang_transfer); 367 + 368 + /*----------------------------------------------------------------------*/ 369 + 370 + /** 371 + * spi_bitbang_start - start up a polled/bitbanging SPI master driver 372 + * @bitbang: driver handle 373 + * 374 + * Caller should have zero-initialized all parts of the structure, and then 375 + * provided callbacks for chip selection and I/O loops. If the master has 376 + * a transfer method, its final step should call spi_bitbang_transfer; or, 377 + * that's the default if the transfer routine is not initialized. It should 378 + * also set up the bus number and number of chipselects. 379 + * 380 + * For i/o loops, provide callbacks either per-word (for bitbanging, or for 381 + * hardware that basically exposes a shift register) or per-spi_transfer 382 + * (which takes better advantage of hardware like fifos or DMA engines). 383 + * 384 + * Drivers using per-word I/O loops should use (or call) spi_bitbang_setup and 385 + * spi_bitbang_cleanup to handle those spi master methods. Those methods are 386 + * the defaults if the bitbang->txrx_bufs routine isn't initialized. 387 + * 388 + * This routine registers the spi_master, which will process requests in a 389 + * dedicated task, keeping IRQs unblocked most of the time. To stop 390 + * processing those requests, call spi_bitbang_stop(). 391 + */ 392 + int spi_bitbang_start(struct spi_bitbang *bitbang) 393 + { 394 + int status; 395 + 396 + if (!bitbang->master || !bitbang->chipselect) 397 + return -EINVAL; 398 + 399 + INIT_WORK(&bitbang->work, bitbang_work, bitbang); 400 + spin_lock_init(&bitbang->lock); 401 + INIT_LIST_HEAD(&bitbang->queue); 402 + 403 + if (!bitbang->master->transfer) 404 + bitbang->master->transfer = spi_bitbang_transfer; 405 + if (!bitbang->txrx_bufs) { 406 + bitbang->use_dma = 0; 407 + bitbang->txrx_bufs = spi_bitbang_bufs; 408 + if (!bitbang->master->setup) { 409 + bitbang->master->setup = spi_bitbang_setup; 410 + bitbang->master->cleanup = spi_bitbang_cleanup; 411 + } 412 + } else if (!bitbang->master->setup) 413 + return -EINVAL; 414 + 415 + /* this task is the only thing to touch the SPI bits */ 416 + bitbang->busy = 0; 417 + bitbang->workqueue = create_singlethread_workqueue( 418 + bitbang->master->cdev.dev->bus_id); 419 + if (bitbang->workqueue == NULL) { 420 + status = -EBUSY; 421 + goto err1; 422 + } 423 + 424 + /* driver may get busy before register() returns, especially 425 + * if someone registered boardinfo for devices 426 + */ 427 + status = spi_register_master(bitbang->master); 428 + if (status < 0) 429 + goto err2; 430 + 431 + return status; 432 + 433 + err2: 434 + destroy_workqueue(bitbang->workqueue); 435 + err1: 436 + return status; 437 + } 438 + EXPORT_SYMBOL_GPL(spi_bitbang_start); 439 + 440 + /** 441 + * spi_bitbang_stop - stops the task providing spi communication 442 + */ 443 + int spi_bitbang_stop(struct spi_bitbang *bitbang) 444 + { 445 + unsigned limit = 500; 446 + 447 + spin_lock_irq(&bitbang->lock); 448 + bitbang->shutdown = 0; 449 + while (!list_empty(&bitbang->queue) && limit--) { 450 + spin_unlock_irq(&bitbang->lock); 451 + 452 + dev_dbg(bitbang->master->cdev.dev, "wait for queue\n"); 453 + msleep(10); 454 + 455 + spin_lock_irq(&bitbang->lock); 456 + } 457 + spin_unlock_irq(&bitbang->lock); 458 + if (!list_empty(&bitbang->queue)) { 459 + dev_err(bitbang->master->cdev.dev, "queue didn't empty\n"); 460 + return -EBUSY; 461 + } 462 + 463 + destroy_workqueue(bitbang->workqueue); 464 + 465 + spi_unregister_master(bitbang->master); 466 + 467 + return 0; 468 + } 469 + EXPORT_SYMBOL_GPL(spi_bitbang_stop); 470 + 471 + MODULE_LICENSE("GPL"); 472 +
+423
drivers/spi/spi_butterfly.c
···
··· 1 + /* 2 + * spi_butterfly.c - parport-to-butterfly adapter 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/config.h> 21 + #include <linux/kernel.h> 22 + #include <linux/init.h> 23 + #include <linux/delay.h> 24 + #include <linux/platform_device.h> 25 + #include <linux/parport.h> 26 + 27 + #include <linux/spi/spi.h> 28 + #include <linux/spi/spi_bitbang.h> 29 + #include <linux/spi/flash.h> 30 + 31 + #include <linux/mtd/partitions.h> 32 + 33 + 34 + /* 35 + * This uses SPI to talk with an "AVR Butterfly", which is a $US20 card 36 + * with a battery powered AVR microcontroller and lots of goodies. You 37 + * can use GCC to develop firmware for this. 38 + * 39 + * See Documentation/spi/butterfly for information about how to build 40 + * and use this custom parallel port cable. 41 + */ 42 + 43 + #undef HAVE_USI /* nyet */ 44 + 45 + 46 + /* DATA output bits (pins 2..9 == D0..D7) */ 47 + #define butterfly_nreset (1 << 1) /* pin 3 */ 48 + 49 + #define spi_sck_bit (1 << 0) /* pin 2 */ 50 + #define spi_mosi_bit (1 << 7) /* pin 9 */ 51 + 52 + #define usi_sck_bit (1 << 3) /* pin 5 */ 53 + #define usi_mosi_bit (1 << 4) /* pin 6 */ 54 + 55 + #define vcc_bits ((1 << 6) | (1 << 5)) /* pins 7, 8 */ 56 + 57 + /* STATUS input bits */ 58 + #define spi_miso_bit PARPORT_STATUS_BUSY /* pin 11 */ 59 + 60 + #define usi_miso_bit PARPORT_STATUS_PAPEROUT /* pin 12 */ 61 + 62 + /* CONTROL output bits */ 63 + #define spi_cs_bit PARPORT_CONTROL_SELECT /* pin 17 */ 64 + /* USI uses no chipselect */ 65 + 66 + 67 + 68 + static inline struct butterfly *spidev_to_pp(struct spi_device *spi) 69 + { 70 + return spi->controller_data; 71 + } 72 + 73 + static inline int is_usidev(struct spi_device *spi) 74 + { 75 + #ifdef HAVE_USI 76 + return spi->chip_select != 1; 77 + #else 78 + return 0; 79 + #endif 80 + } 81 + 82 + 83 + struct butterfly { 84 + /* REVISIT ... for now, this must be first */ 85 + struct spi_bitbang bitbang; 86 + 87 + struct parport *port; 88 + struct pardevice *pd; 89 + 90 + u8 lastbyte; 91 + 92 + struct spi_device *dataflash; 93 + struct spi_device *butterfly; 94 + struct spi_board_info info[2]; 95 + 96 + }; 97 + 98 + /*----------------------------------------------------------------------*/ 99 + 100 + /* 101 + * these routines may be slower than necessary because they're hiding 102 + * the fact that there are two different SPI busses on this cable: one 103 + * to the DataFlash chip (or AVR SPI controller), the other to the 104 + * AVR USI controller. 105 + */ 106 + 107 + static inline void 108 + setsck(struct spi_device *spi, int is_on) 109 + { 110 + struct butterfly *pp = spidev_to_pp(spi); 111 + u8 bit, byte = pp->lastbyte; 112 + 113 + if (is_usidev(spi)) 114 + bit = usi_sck_bit; 115 + else 116 + bit = spi_sck_bit; 117 + 118 + if (is_on) 119 + byte |= bit; 120 + else 121 + byte &= ~bit; 122 + parport_write_data(pp->port, byte); 123 + pp->lastbyte = byte; 124 + } 125 + 126 + static inline void 127 + setmosi(struct spi_device *spi, int is_on) 128 + { 129 + struct butterfly *pp = spidev_to_pp(spi); 130 + u8 bit, byte = pp->lastbyte; 131 + 132 + if (is_usidev(spi)) 133 + bit = usi_mosi_bit; 134 + else 135 + bit = spi_mosi_bit; 136 + 137 + if (is_on) 138 + byte |= bit; 139 + else 140 + byte &= ~bit; 141 + parport_write_data(pp->port, byte); 142 + pp->lastbyte = byte; 143 + } 144 + 145 + static inline int getmiso(struct spi_device *spi) 146 + { 147 + struct butterfly *pp = spidev_to_pp(spi); 148 + int value; 149 + u8 bit; 150 + 151 + if (is_usidev(spi)) 152 + bit = usi_miso_bit; 153 + else 154 + bit = spi_miso_bit; 155 + 156 + /* only STATUS_BUSY is NOT negated */ 157 + value = !(parport_read_status(pp->port) & bit); 158 + return (bit == PARPORT_STATUS_BUSY) ? value : !value; 159 + } 160 + 161 + static void butterfly_chipselect(struct spi_device *spi, int value) 162 + { 163 + struct butterfly *pp = spidev_to_pp(spi); 164 + 165 + /* set default clock polarity */ 166 + if (value) 167 + setsck(spi, spi->mode & SPI_CPOL); 168 + 169 + /* no chipselect on this USI link config */ 170 + if (is_usidev(spi)) 171 + return; 172 + 173 + /* here, value == "activate or not" */ 174 + 175 + /* most PARPORT_CONTROL_* bits are negated */ 176 + if (spi_cs_bit == PARPORT_CONTROL_INIT) 177 + value = !value; 178 + 179 + /* here, value == "bit value to write in control register" */ 180 + 181 + parport_frob_control(pp->port, spi_cs_bit, value ? spi_cs_bit : 0); 182 + } 183 + 184 + 185 + /* we only needed to implement one mode here, and choose SPI_MODE_0 */ 186 + 187 + #define spidelay(X) do{}while(0) 188 + //#define spidelay ndelay 189 + 190 + #define EXPAND_BITBANG_TXRX 191 + #include <linux/spi/spi_bitbang.h> 192 + 193 + static u32 194 + butterfly_txrx_word_mode0(struct spi_device *spi, 195 + unsigned nsecs, 196 + u32 word, u8 bits) 197 + { 198 + return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, bits); 199 + } 200 + 201 + /*----------------------------------------------------------------------*/ 202 + 203 + /* override default partitioning with cmdlinepart */ 204 + static struct mtd_partition partitions[] = { { 205 + /* JFFS2 wants partitions of 4*N blocks for this device ... */ 206 + 207 + /* sector 0 = 8 pages * 264 bytes/page (1 block) 208 + * sector 1 = 248 pages * 264 bytes/page 209 + */ 210 + .name = "bookkeeping", // 66 KB 211 + .offset = 0, 212 + .size = (8 + 248) * 264, 213 + // .mask_flags = MTD_WRITEABLE, 214 + }, { 215 + /* sector 2 = 256 pages * 264 bytes/page 216 + * sectors 3-5 = 512 pages * 264 bytes/page 217 + */ 218 + .name = "filesystem", // 462 KB 219 + .offset = MTDPART_OFS_APPEND, 220 + .size = MTDPART_SIZ_FULL, 221 + } }; 222 + 223 + static struct flash_platform_data flash = { 224 + .name = "butterflash", 225 + .parts = partitions, 226 + .nr_parts = ARRAY_SIZE(partitions), 227 + }; 228 + 229 + 230 + /* REVISIT remove this ugly global and its "only one" limitation */ 231 + static struct butterfly *butterfly; 232 + 233 + static void butterfly_attach(struct parport *p) 234 + { 235 + struct pardevice *pd; 236 + int status; 237 + struct butterfly *pp; 238 + struct spi_master *master; 239 + struct platform_device *pdev; 240 + 241 + if (butterfly) 242 + return; 243 + 244 + /* REVISIT: this just _assumes_ a butterfly is there ... no probe, 245 + * and no way to be selective about what it binds to. 246 + */ 247 + 248 + /* FIXME where should master->cdev.dev come from? 249 + * e.g. /sys/bus/pnp0/00:0b, some PCI thing, etc 250 + * setting up a platform device like this is an ugly kluge... 251 + */ 252 + pdev = platform_device_register_simple("butterfly", -1, NULL, 0); 253 + 254 + master = spi_alloc_master(&pdev->dev, sizeof *pp); 255 + if (!master) { 256 + status = -ENOMEM; 257 + goto done; 258 + } 259 + pp = spi_master_get_devdata(master); 260 + 261 + /* 262 + * SPI and bitbang hookup 263 + * 264 + * use default setup(), cleanup(), and transfer() methods; and 265 + * only bother implementing mode 0. Start it later. 266 + */ 267 + master->bus_num = 42; 268 + master->num_chipselect = 2; 269 + 270 + pp->bitbang.master = spi_master_get(master); 271 + pp->bitbang.chipselect = butterfly_chipselect; 272 + pp->bitbang.txrx_word[SPI_MODE_0] = butterfly_txrx_word_mode0; 273 + 274 + /* 275 + * parport hookup 276 + */ 277 + pp->port = p; 278 + pd = parport_register_device(p, "spi_butterfly", 279 + NULL, NULL, NULL, 280 + 0 /* FLAGS */, pp); 281 + if (!pd) { 282 + status = -ENOMEM; 283 + goto clean0; 284 + } 285 + pp->pd = pd; 286 + 287 + status = parport_claim(pd); 288 + if (status < 0) 289 + goto clean1; 290 + 291 + /* 292 + * Butterfly reset, powerup, run firmware 293 + */ 294 + pr_debug("%s: powerup/reset Butterfly\n", p->name); 295 + 296 + /* nCS for dataflash (this bit is inverted on output) */ 297 + parport_frob_control(pp->port, spi_cs_bit, 0); 298 + 299 + /* stabilize power with chip in reset (nRESET), and 300 + * both spi_sck_bit and usi_sck_bit clear (CPOL=0) 301 + */ 302 + pp->lastbyte |= vcc_bits; 303 + parport_write_data(pp->port, pp->lastbyte); 304 + msleep(5); 305 + 306 + /* take it out of reset; assume long reset delay */ 307 + pp->lastbyte |= butterfly_nreset; 308 + parport_write_data(pp->port, pp->lastbyte); 309 + msleep(100); 310 + 311 + 312 + /* 313 + * Start SPI ... for now, hide that we're two physical busses. 314 + */ 315 + status = spi_bitbang_start(&pp->bitbang); 316 + if (status < 0) 317 + goto clean2; 318 + 319 + /* Bus 1 lets us talk to at45db041b (firmware disables AVR) 320 + * or AVR (firmware resets at45, acts as spi slave) 321 + */ 322 + pp->info[0].max_speed_hz = 15 * 1000 * 1000; 323 + strcpy(pp->info[0].modalias, "mtd_dataflash"); 324 + pp->info[0].platform_data = &flash; 325 + pp->info[0].chip_select = 1; 326 + pp->info[0].controller_data = pp; 327 + pp->dataflash = spi_new_device(pp->bitbang.master, &pp->info[0]); 328 + if (pp->dataflash) 329 + pr_debug("%s: dataflash at %s\n", p->name, 330 + pp->dataflash->dev.bus_id); 331 + 332 + #ifdef HAVE_USI 333 + /* even more custom AVR firmware */ 334 + pp->info[1].max_speed_hz = 10 /* ?? */ * 1000 * 1000; 335 + strcpy(pp->info[1].modalias, "butterfly"); 336 + // pp->info[1].platform_data = ... TBD ... ; 337 + pp->info[1].chip_select = 2, 338 + pp->info[1].controller_data = pp; 339 + pp->butterfly = spi_new_device(pp->bitbang.master, &pp->info[1]); 340 + if (pp->butterfly) 341 + pr_debug("%s: butterfly at %s\n", p->name, 342 + pp->butterfly->dev.bus_id); 343 + 344 + /* FIXME setup ACK for the IRQ line ... */ 345 + #endif 346 + 347 + // dev_info(_what?_, ...) 348 + pr_info("%s: AVR Butterfly\n", p->name); 349 + butterfly = pp; 350 + return; 351 + 352 + clean2: 353 + /* turn off VCC */ 354 + parport_write_data(pp->port, 0); 355 + 356 + parport_release(pp->pd); 357 + clean1: 358 + parport_unregister_device(pd); 359 + clean0: 360 + (void) spi_master_put(pp->bitbang.master); 361 + done: 362 + platform_device_unregister(pdev); 363 + pr_debug("%s: butterfly probe, fail %d\n", p->name, status); 364 + } 365 + 366 + static void butterfly_detach(struct parport *p) 367 + { 368 + struct butterfly *pp; 369 + struct platform_device *pdev; 370 + int status; 371 + 372 + /* FIXME this global is ugly ... but, how to quickly get from 373 + * the parport to the "struct butterfly" associated with it? 374 + * "old school" driver-internal device lists? 375 + */ 376 + if (!butterfly || butterfly->port != p) 377 + return; 378 + pp = butterfly; 379 + butterfly = NULL; 380 + 381 + #ifdef HAVE_USI 382 + spi_unregister_device(pp->butterfly); 383 + pp->butterfly = NULL; 384 + #endif 385 + spi_unregister_device(pp->dataflash); 386 + pp->dataflash = NULL; 387 + 388 + status = spi_bitbang_stop(&pp->bitbang); 389 + 390 + /* turn off VCC */ 391 + parport_write_data(pp->port, 0); 392 + msleep(10); 393 + 394 + parport_release(pp->pd); 395 + parport_unregister_device(pp->pd); 396 + 397 + pdev = to_platform_device(pp->bitbang.master->cdev.dev); 398 + 399 + (void) spi_master_put(pp->bitbang.master); 400 + 401 + platform_device_unregister(pdev); 402 + } 403 + 404 + static struct parport_driver butterfly_driver = { 405 + .name = "spi_butterfly", 406 + .attach = butterfly_attach, 407 + .detach = butterfly_detach, 408 + }; 409 + 410 + 411 + static int __init butterfly_init(void) 412 + { 413 + return parport_register_driver(&butterfly_driver); 414 + } 415 + device_initcall(butterfly_init); 416 + 417 + static void __exit butterfly_exit(void) 418 + { 419 + parport_unregister_driver(&butterfly_driver); 420 + } 421 + module_exit(butterfly_exit); 422 + 423 + MODULE_LICENSE("GPL");
+18
include/linux/spi/ads7846.h
···
··· 1 + /* linux/spi/ads7846.h */ 2 + 3 + /* Touchscreen characteristics vary between boards and models. The 4 + * platform_data for the device's "struct device" holds this information. 5 + * 6 + * It's OK if the min/max values are zero. 7 + */ 8 + struct ads7846_platform_data { 9 + u16 model; /* 7843, 7845, 7846. */ 10 + u16 vref_delay_usecs; /* 0 for external vref; etc */ 11 + u16 x_plate_ohms; 12 + u16 y_plate_ohms; 13 + 14 + u16 x_min, x_max; 15 + u16 y_min, y_max; 16 + u16 pressure_min, pressure_max; 17 + }; 18 +
+31
include/linux/spi/flash.h
···
··· 1 + #ifndef LINUX_SPI_FLASH_H 2 + #define LINUX_SPI_FLASH_H 3 + 4 + struct mtd_partition; 5 + 6 + /** 7 + * struct flash_platform_data: board-specific flash data 8 + * @name: optional flash device name (eg, as used with mtdparts=) 9 + * @parts: optional array of mtd_partitions for static partitioning 10 + * @nr_parts: number of mtd_partitions for static partitoning 11 + * @type: optional flash device type (e.g. m25p80 vs m25p64), for use 12 + * with chips that can't be queried for JEDEC or other IDs 13 + * 14 + * Board init code (in arch/.../mach-xxx/board-yyy.c files) can 15 + * provide information about SPI flash parts (such as DataFlash) to 16 + * help set up the device and its appropriate default partitioning. 17 + * 18 + * Note that for DataFlash, sizes for pages, blocks, and sectors are 19 + * rarely powers of two; and partitions should be sector-aligned. 20 + */ 21 + struct flash_platform_data { 22 + char *name; 23 + struct mtd_partition *parts; 24 + unsigned int nr_parts; 25 + 26 + char *type; 27 + 28 + /* we'll likely add more ... use JEDEC IDs, etc */ 29 + }; 30 + 31 + #endif
+668
include/linux/spi/spi.h
···
··· 1 + /* 2 + * Copyright (C) 2005 David Brownell 3 + * 4 + * This program is free software; you can redistribute it and/or modify 5 + * it under the terms of the GNU General Public License as published by 6 + * the Free Software Foundation; either version 2 of the License, or 7 + * (at your option) any later version. 8 + * 9 + * This program is distributed in the hope that it will be useful, 10 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 + * GNU General Public License for more details. 13 + * 14 + * You should have received a copy of the GNU General Public License 15 + * along with this program; if not, write to the Free Software 16 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 + */ 18 + 19 + #ifndef __LINUX_SPI_H 20 + #define __LINUX_SPI_H 21 + 22 + /* 23 + * INTERFACES between SPI master-side drivers and SPI infrastructure. 24 + * (There's no SPI slave support for Linux yet...) 25 + */ 26 + extern struct bus_type spi_bus_type; 27 + 28 + /** 29 + * struct spi_device - Master side proxy for an SPI slave device 30 + * @dev: Driver model representation of the device. 31 + * @master: SPI controller used with the device. 32 + * @max_speed_hz: Maximum clock rate to be used with this chip 33 + * (on this board); may be changed by the device's driver. 34 + * @chip-select: Chipselect, distinguishing chips handled by "master". 35 + * @mode: The spi mode defines how data is clocked out and in. 36 + * This may be changed by the device's driver. 37 + * @bits_per_word: Data transfers involve one or more words; word sizes 38 + * like eight or 12 bits are common. In-memory wordsizes are 39 + * powers of two bytes (e.g. 20 bit samples use 32 bits). 40 + * This may be changed by the device's driver. 41 + * @irq: Negative, or the number passed to request_irq() to receive 42 + * interrupts from this device. 43 + * @controller_state: Controller's runtime state 44 + * @controller_data: Board-specific definitions for controller, such as 45 + * FIFO initialization parameters; from board_info.controller_data 46 + * 47 + * An spi_device is used to interchange data between an SPI slave 48 + * (usually a discrete chip) and CPU memory. 49 + * 50 + * In "dev", the platform_data is used to hold information about this 51 + * device that's meaningful to the device's protocol driver, but not 52 + * to its controller. One example might be an identifier for a chip 53 + * variant with slightly different functionality. 54 + */ 55 + struct spi_device { 56 + struct device dev; 57 + struct spi_master *master; 58 + u32 max_speed_hz; 59 + u8 chip_select; 60 + u8 mode; 61 + #define SPI_CPHA 0x01 /* clock phase */ 62 + #define SPI_CPOL 0x02 /* clock polarity */ 63 + #define SPI_MODE_0 (0|0) /* (original MicroWire) */ 64 + #define SPI_MODE_1 (0|SPI_CPHA) 65 + #define SPI_MODE_2 (SPI_CPOL|0) 66 + #define SPI_MODE_3 (SPI_CPOL|SPI_CPHA) 67 + #define SPI_CS_HIGH 0x04 /* chipselect active high? */ 68 + u8 bits_per_word; 69 + int irq; 70 + void *controller_state; 71 + void *controller_data; 72 + const char *modalias; 73 + 74 + // likely need more hooks for more protocol options affecting how 75 + // the controller talks to each chip, like: 76 + // - bit order (default is wordwise msb-first) 77 + // - memory packing (12 bit samples into low bits, others zeroed) 78 + // - priority 79 + // - drop chipselect after each word 80 + // - chipselect delays 81 + // - ... 82 + }; 83 + 84 + static inline struct spi_device *to_spi_device(struct device *dev) 85 + { 86 + return dev ? container_of(dev, struct spi_device, dev) : NULL; 87 + } 88 + 89 + /* most drivers won't need to care about device refcounting */ 90 + static inline struct spi_device *spi_dev_get(struct spi_device *spi) 91 + { 92 + return (spi && get_device(&spi->dev)) ? spi : NULL; 93 + } 94 + 95 + static inline void spi_dev_put(struct spi_device *spi) 96 + { 97 + if (spi) 98 + put_device(&spi->dev); 99 + } 100 + 101 + /* ctldata is for the bus_master driver's runtime state */ 102 + static inline void *spi_get_ctldata(struct spi_device *spi) 103 + { 104 + return spi->controller_state; 105 + } 106 + 107 + static inline void spi_set_ctldata(struct spi_device *spi, void *state) 108 + { 109 + spi->controller_state = state; 110 + } 111 + 112 + 113 + struct spi_message; 114 + 115 + 116 + 117 + struct spi_driver { 118 + int (*probe)(struct spi_device *spi); 119 + int (*remove)(struct spi_device *spi); 120 + void (*shutdown)(struct spi_device *spi); 121 + int (*suspend)(struct spi_device *spi, pm_message_t mesg); 122 + int (*resume)(struct spi_device *spi); 123 + struct device_driver driver; 124 + }; 125 + 126 + static inline struct spi_driver *to_spi_driver(struct device_driver *drv) 127 + { 128 + return drv ? container_of(drv, struct spi_driver, driver) : NULL; 129 + } 130 + 131 + extern int spi_register_driver(struct spi_driver *sdrv); 132 + 133 + static inline void spi_unregister_driver(struct spi_driver *sdrv) 134 + { 135 + if (!sdrv) 136 + return; 137 + driver_unregister(&sdrv->driver); 138 + } 139 + 140 + 141 + 142 + /** 143 + * struct spi_master - interface to SPI master controller 144 + * @cdev: class interface to this driver 145 + * @bus_num: board-specific (and often SOC-specific) identifier for a 146 + * given SPI controller. 147 + * @num_chipselect: chipselects are used to distinguish individual 148 + * SPI slaves, and are numbered from zero to num_chipselects. 149 + * each slave has a chipselect signal, but it's common that not 150 + * every chipselect is connected to a slave. 151 + * @setup: updates the device mode and clocking records used by a 152 + * device's SPI controller; protocol code may call this. 153 + * @transfer: adds a message to the controller's transfer queue. 154 + * @cleanup: frees controller-specific state 155 + * 156 + * Each SPI master controller can communicate with one or more spi_device 157 + * children. These make a small bus, sharing MOSI, MISO and SCK signals 158 + * but not chip select signals. Each device may be configured to use a 159 + * different clock rate, since those shared signals are ignored unless 160 + * the chip is selected. 161 + * 162 + * The driver for an SPI controller manages access to those devices through 163 + * a queue of spi_message transactions, copyin data between CPU memory and 164 + * an SPI slave device). For each such message it queues, it calls the 165 + * message's completion function when the transaction completes. 166 + */ 167 + struct spi_master { 168 + struct class_device cdev; 169 + 170 + /* other than zero (== assign one dynamically), bus_num is fully 171 + * board-specific. usually that simplifies to being SOC-specific. 172 + * example: one SOC has three SPI controllers, numbered 1..3, 173 + * and one board's schematics might show it using SPI-2. software 174 + * would normally use bus_num=2 for that controller. 175 + */ 176 + u16 bus_num; 177 + 178 + /* chipselects will be integral to many controllers; some others 179 + * might use board-specific GPIOs. 180 + */ 181 + u16 num_chipselect; 182 + 183 + /* setup mode and clock, etc (spi driver may call many times) */ 184 + int (*setup)(struct spi_device *spi); 185 + 186 + /* bidirectional bulk transfers 187 + * 188 + * + The transfer() method may not sleep; its main role is 189 + * just to add the message to the queue. 190 + * + For now there's no remove-from-queue operation, or 191 + * any other request management 192 + * + To a given spi_device, message queueing is pure fifo 193 + * 194 + * + The master's main job is to process its message queue, 195 + * selecting a chip then transferring data 196 + * + If there are multiple spi_device children, the i/o queue 197 + * arbitration algorithm is unspecified (round robin, fifo, 198 + * priority, reservations, preemption, etc) 199 + * 200 + * + Chipselect stays active during the entire message 201 + * (unless modified by spi_transfer.cs_change != 0). 202 + * + The message transfers use clock and SPI mode parameters 203 + * previously established by setup() for this device 204 + */ 205 + int (*transfer)(struct spi_device *spi, 206 + struct spi_message *mesg); 207 + 208 + /* called on release() to free memory provided by spi_master */ 209 + void (*cleanup)(const struct spi_device *spi); 210 + }; 211 + 212 + static inline void *spi_master_get_devdata(struct spi_master *master) 213 + { 214 + return class_get_devdata(&master->cdev); 215 + } 216 + 217 + static inline void spi_master_set_devdata(struct spi_master *master, void *data) 218 + { 219 + class_set_devdata(&master->cdev, data); 220 + } 221 + 222 + static inline struct spi_master *spi_master_get(struct spi_master *master) 223 + { 224 + if (!master || !class_device_get(&master->cdev)) 225 + return NULL; 226 + return master; 227 + } 228 + 229 + static inline void spi_master_put(struct spi_master *master) 230 + { 231 + if (master) 232 + class_device_put(&master->cdev); 233 + } 234 + 235 + 236 + /* the spi driver core manages memory for the spi_master classdev */ 237 + extern struct spi_master * 238 + spi_alloc_master(struct device *host, unsigned size); 239 + 240 + extern int spi_register_master(struct spi_master *master); 241 + extern void spi_unregister_master(struct spi_master *master); 242 + 243 + extern struct spi_master *spi_busnum_to_master(u16 busnum); 244 + 245 + /*---------------------------------------------------------------------------*/ 246 + 247 + /* 248 + * I/O INTERFACE between SPI controller and protocol drivers 249 + * 250 + * Protocol drivers use a queue of spi_messages, each transferring data 251 + * between the controller and memory buffers. 252 + * 253 + * The spi_messages themselves consist of a series of read+write transfer 254 + * segments. Those segments always read the same number of bits as they 255 + * write; but one or the other is easily ignored by passing a null buffer 256 + * pointer. (This is unlike most types of I/O API, because SPI hardware 257 + * is full duplex.) 258 + * 259 + * NOTE: Allocation of spi_transfer and spi_message memory is entirely 260 + * up to the protocol driver, which guarantees the integrity of both (as 261 + * well as the data buffers) for as long as the message is queued. 262 + */ 263 + 264 + /** 265 + * struct spi_transfer - a read/write buffer pair 266 + * @tx_buf: data to be written (dma-safe memory), or NULL 267 + * @rx_buf: data to be read (dma-safe memory), or NULL 268 + * @tx_dma: DMA address of tx_buf, if spi_message.is_dma_mapped 269 + * @rx_dma: DMA address of rx_buf, if spi_message.is_dma_mapped 270 + * @len: size of rx and tx buffers (in bytes) 271 + * @cs_change: affects chipselect after this transfer completes 272 + * @delay_usecs: microseconds to delay after this transfer before 273 + * (optionally) changing the chipselect status, then starting 274 + * the next transfer or completing this spi_message. 275 + * @transfer_list: transfers are sequenced through spi_message.transfers 276 + * 277 + * SPI transfers always write the same number of bytes as they read. 278 + * Protocol drivers should always provide rx_buf and/or tx_buf. 279 + * In some cases, they may also want to provide DMA addresses for 280 + * the data being transferred; that may reduce overhead, when the 281 + * underlying driver uses dma. 282 + * 283 + * If the transmit buffer is null, undefined data will be shifted out 284 + * while filling rx_buf. If the receive buffer is null, the data 285 + * shifted in will be discarded. Only "len" bytes shift out (or in). 286 + * It's an error to try to shift out a partial word. (For example, by 287 + * shifting out three bytes with word size of sixteen or twenty bits; 288 + * the former uses two bytes per word, the latter uses four bytes.) 289 + * 290 + * All SPI transfers start with the relevant chipselect active. Normally 291 + * it stays selected until after the last transfer in a message. Drivers 292 + * can affect the chipselect signal using cs_change: 293 + * 294 + * (i) If the transfer isn't the last one in the message, this flag is 295 + * used to make the chipselect briefly go inactive in the middle of the 296 + * message. Toggling chipselect in this way may be needed to terminate 297 + * a chip command, letting a single spi_message perform all of group of 298 + * chip transactions together. 299 + * 300 + * (ii) When the transfer is the last one in the message, the chip may 301 + * stay selected until the next transfer. This is purely a performance 302 + * hint; the controller driver may need to select a different device 303 + * for the next message. 304 + * 305 + * The code that submits an spi_message (and its spi_transfers) 306 + * to the lower layers is responsible for managing its memory. 307 + * Zero-initialize every field you don't set up explicitly, to 308 + * insulate against future API updates. After you submit a message 309 + * and its transfers, ignore them until its completion callback. 310 + */ 311 + struct spi_transfer { 312 + /* it's ok if tx_buf == rx_buf (right?) 313 + * for MicroWire, one buffer must be null 314 + * buffers must work with dma_*map_single() calls, unless 315 + * spi_message.is_dma_mapped reports a pre-existing mapping 316 + */ 317 + const void *tx_buf; 318 + void *rx_buf; 319 + unsigned len; 320 + 321 + dma_addr_t tx_dma; 322 + dma_addr_t rx_dma; 323 + 324 + unsigned cs_change:1; 325 + u16 delay_usecs; 326 + 327 + struct list_head transfer_list; 328 + }; 329 + 330 + /** 331 + * struct spi_message - one multi-segment SPI transaction 332 + * @transfers: list of transfer segments in this transaction 333 + * @spi: SPI device to which the transaction is queued 334 + * @is_dma_mapped: if true, the caller provided both dma and cpu virtual 335 + * addresses for each transfer buffer 336 + * @complete: called to report transaction completions 337 + * @context: the argument to complete() when it's called 338 + * @actual_length: the total number of bytes that were transferred in all 339 + * successful segments 340 + * @status: zero for success, else negative errno 341 + * @queue: for use by whichever driver currently owns the message 342 + * @state: for use by whichever driver currently owns the message 343 + * 344 + * An spi_message is used to execute an atomic sequence of data transfers, 345 + * each represented by a struct spi_transfer. The sequence is "atomic" 346 + * in the sense that no other spi_message may use that SPI bus until that 347 + * sequence completes. On some systems, many such sequences can execute as 348 + * as single programmed DMA transfer. On all systems, these messages are 349 + * queued, and might complete after transactions to other devices. Messages 350 + * sent to a given spi_device are alway executed in FIFO order. 351 + * 352 + * The code that submits an spi_message (and its spi_transfers) 353 + * to the lower layers is responsible for managing its memory. 354 + * Zero-initialize every field you don't set up explicitly, to 355 + * insulate against future API updates. After you submit a message 356 + * and its transfers, ignore them until its completion callback. 357 + */ 358 + struct spi_message { 359 + struct list_head transfers; 360 + 361 + struct spi_device *spi; 362 + 363 + unsigned is_dma_mapped:1; 364 + 365 + /* REVISIT: we might want a flag affecting the behavior of the 366 + * last transfer ... allowing things like "read 16 bit length L" 367 + * immediately followed by "read L bytes". Basically imposing 368 + * a specific message scheduling algorithm. 369 + * 370 + * Some controller drivers (message-at-a-time queue processing) 371 + * could provide that as their default scheduling algorithm. But 372 + * others (with multi-message pipelines) could need a flag to 373 + * tell them about such special cases. 374 + */ 375 + 376 + /* completion is reported through a callback */ 377 + void (*complete)(void *context); 378 + void *context; 379 + unsigned actual_length; 380 + int status; 381 + 382 + /* for optional use by whatever driver currently owns the 383 + * spi_message ... between calls to spi_async and then later 384 + * complete(), that's the spi_master controller driver. 385 + */ 386 + struct list_head queue; 387 + void *state; 388 + }; 389 + 390 + static inline void spi_message_init(struct spi_message *m) 391 + { 392 + memset(m, 0, sizeof *m); 393 + INIT_LIST_HEAD(&m->transfers); 394 + } 395 + 396 + static inline void 397 + spi_message_add_tail(struct spi_transfer *t, struct spi_message *m) 398 + { 399 + list_add_tail(&t->transfer_list, &m->transfers); 400 + } 401 + 402 + static inline void 403 + spi_transfer_del(struct spi_transfer *t) 404 + { 405 + list_del(&t->transfer_list); 406 + } 407 + 408 + /* It's fine to embed message and transaction structures in other data 409 + * structures so long as you don't free them while they're in use. 410 + */ 411 + 412 + static inline struct spi_message *spi_message_alloc(unsigned ntrans, gfp_t flags) 413 + { 414 + struct spi_message *m; 415 + 416 + m = kzalloc(sizeof(struct spi_message) 417 + + ntrans * sizeof(struct spi_transfer), 418 + flags); 419 + if (m) { 420 + int i; 421 + struct spi_transfer *t = (struct spi_transfer *)(m + 1); 422 + 423 + INIT_LIST_HEAD(&m->transfers); 424 + for (i = 0; i < ntrans; i++, t++) 425 + spi_message_add_tail(t, m); 426 + } 427 + return m; 428 + } 429 + 430 + static inline void spi_message_free(struct spi_message *m) 431 + { 432 + kfree(m); 433 + } 434 + 435 + /** 436 + * spi_setup -- setup SPI mode and clock rate 437 + * @spi: the device whose settings are being modified 438 + * 439 + * SPI protocol drivers may need to update the transfer mode if the 440 + * device doesn't work with the mode 0 default. They may likewise need 441 + * to update clock rates or word sizes from initial values. This function 442 + * changes those settings, and must be called from a context that can sleep. 443 + * The changes take effect the next time the device is selected and data 444 + * is transferred to or from it. 445 + */ 446 + static inline int 447 + spi_setup(struct spi_device *spi) 448 + { 449 + return spi->master->setup(spi); 450 + } 451 + 452 + 453 + /** 454 + * spi_async -- asynchronous SPI transfer 455 + * @spi: device with which data will be exchanged 456 + * @message: describes the data transfers, including completion callback 457 + * 458 + * This call may be used in_irq and other contexts which can't sleep, 459 + * as well as from task contexts which can sleep. 460 + * 461 + * The completion callback is invoked in a context which can't sleep. 462 + * Before that invocation, the value of message->status is undefined. 463 + * When the callback is issued, message->status holds either zero (to 464 + * indicate complete success) or a negative error code. After that 465 + * callback returns, the driver which issued the transfer request may 466 + * deallocate the associated memory; it's no longer in use by any SPI 467 + * core or controller driver code. 468 + * 469 + * Note that although all messages to a spi_device are handled in 470 + * FIFO order, messages may go to different devices in other orders. 471 + * Some device might be higher priority, or have various "hard" access 472 + * time requirements, for example. 473 + * 474 + * On detection of any fault during the transfer, processing of 475 + * the entire message is aborted, and the device is deselected. 476 + * Until returning from the associated message completion callback, 477 + * no other spi_message queued to that device will be processed. 478 + * (This rule applies equally to all the synchronous transfer calls, 479 + * which are wrappers around this core asynchronous primitive.) 480 + */ 481 + static inline int 482 + spi_async(struct spi_device *spi, struct spi_message *message) 483 + { 484 + message->spi = spi; 485 + return spi->master->transfer(spi, message); 486 + } 487 + 488 + /*---------------------------------------------------------------------------*/ 489 + 490 + /* All these synchronous SPI transfer routines are utilities layered 491 + * over the core async transfer primitive. Here, "synchronous" means 492 + * they will sleep uninterruptibly until the async transfer completes. 493 + */ 494 + 495 + extern int spi_sync(struct spi_device *spi, struct spi_message *message); 496 + 497 + /** 498 + * spi_write - SPI synchronous write 499 + * @spi: device to which data will be written 500 + * @buf: data buffer 501 + * @len: data buffer size 502 + * 503 + * This writes the buffer and returns zero or a negative error code. 504 + * Callable only from contexts that can sleep. 505 + */ 506 + static inline int 507 + spi_write(struct spi_device *spi, const u8 *buf, size_t len) 508 + { 509 + struct spi_transfer t = { 510 + .tx_buf = buf, 511 + .len = len, 512 + }; 513 + struct spi_message m; 514 + 515 + spi_message_init(&m); 516 + spi_message_add_tail(&t, &m); 517 + return spi_sync(spi, &m); 518 + } 519 + 520 + /** 521 + * spi_read - SPI synchronous read 522 + * @spi: device from which data will be read 523 + * @buf: data buffer 524 + * @len: data buffer size 525 + * 526 + * This writes the buffer and returns zero or a negative error code. 527 + * Callable only from contexts that can sleep. 528 + */ 529 + static inline int 530 + spi_read(struct spi_device *spi, u8 *buf, size_t len) 531 + { 532 + struct spi_transfer t = { 533 + .rx_buf = buf, 534 + .len = len, 535 + }; 536 + struct spi_message m; 537 + 538 + spi_message_init(&m); 539 + spi_message_add_tail(&t, &m); 540 + return spi_sync(spi, &m); 541 + } 542 + 543 + /* this copies txbuf and rxbuf data; for small transfers only! */ 544 + extern int spi_write_then_read(struct spi_device *spi, 545 + const u8 *txbuf, unsigned n_tx, 546 + u8 *rxbuf, unsigned n_rx); 547 + 548 + /** 549 + * spi_w8r8 - SPI synchronous 8 bit write followed by 8 bit read 550 + * @spi: device with which data will be exchanged 551 + * @cmd: command to be written before data is read back 552 + * 553 + * This returns the (unsigned) eight bit number returned by the 554 + * device, or else a negative error code. Callable only from 555 + * contexts that can sleep. 556 + */ 557 + static inline ssize_t spi_w8r8(struct spi_device *spi, u8 cmd) 558 + { 559 + ssize_t status; 560 + u8 result; 561 + 562 + status = spi_write_then_read(spi, &cmd, 1, &result, 1); 563 + 564 + /* return negative errno or unsigned value */ 565 + return (status < 0) ? status : result; 566 + } 567 + 568 + /** 569 + * spi_w8r16 - SPI synchronous 8 bit write followed by 16 bit read 570 + * @spi: device with which data will be exchanged 571 + * @cmd: command to be written before data is read back 572 + * 573 + * This returns the (unsigned) sixteen bit number returned by the 574 + * device, or else a negative error code. Callable only from 575 + * contexts that can sleep. 576 + * 577 + * The number is returned in wire-order, which is at least sometimes 578 + * big-endian. 579 + */ 580 + static inline ssize_t spi_w8r16(struct spi_device *spi, u8 cmd) 581 + { 582 + ssize_t status; 583 + u16 result; 584 + 585 + status = spi_write_then_read(spi, &cmd, 1, (u8 *) &result, 2); 586 + 587 + /* return negative errno or unsigned value */ 588 + return (status < 0) ? status : result; 589 + } 590 + 591 + /*---------------------------------------------------------------------------*/ 592 + 593 + /* 594 + * INTERFACE between board init code and SPI infrastructure. 595 + * 596 + * No SPI driver ever sees these SPI device table segments, but 597 + * it's how the SPI core (or adapters that get hotplugged) grows 598 + * the driver model tree. 599 + * 600 + * As a rule, SPI devices can't be probed. Instead, board init code 601 + * provides a table listing the devices which are present, with enough 602 + * information to bind and set up the device's driver. There's basic 603 + * support for nonstatic configurations too; enough to handle adding 604 + * parport adapters, or microcontrollers acting as USB-to-SPI bridges. 605 + */ 606 + 607 + /* board-specific information about each SPI device */ 608 + struct spi_board_info { 609 + /* the device name and module name are coupled, like platform_bus; 610 + * "modalias" is normally the driver name. 611 + * 612 + * platform_data goes to spi_device.dev.platform_data, 613 + * controller_data goes to spi_device.controller_data, 614 + * irq is copied too 615 + */ 616 + char modalias[KOBJ_NAME_LEN]; 617 + const void *platform_data; 618 + void *controller_data; 619 + int irq; 620 + 621 + /* slower signaling on noisy or low voltage boards */ 622 + u32 max_speed_hz; 623 + 624 + 625 + /* bus_num is board specific and matches the bus_num of some 626 + * spi_master that will probably be registered later. 627 + * 628 + * chip_select reflects how this chip is wired to that master; 629 + * it's less than num_chipselect. 630 + */ 631 + u16 bus_num; 632 + u16 chip_select; 633 + 634 + /* ... may need additional spi_device chip config data here. 635 + * avoid stuff protocol drivers can set; but include stuff 636 + * needed to behave without being bound to a driver: 637 + * - chipselect polarity 638 + * - quirks like clock rate mattering when not selected 639 + */ 640 + }; 641 + 642 + #ifdef CONFIG_SPI 643 + extern int 644 + spi_register_board_info(struct spi_board_info const *info, unsigned n); 645 + #else 646 + /* board init code may ignore whether SPI is configured or not */ 647 + static inline int 648 + spi_register_board_info(struct spi_board_info const *info, unsigned n) 649 + { return 0; } 650 + #endif 651 + 652 + 653 + /* If you're hotplugging an adapter with devices (parport, usb, etc) 654 + * use spi_new_device() to describe each device. You can also call 655 + * spi_unregister_device() to start making that device vanish, but 656 + * normally that would be handled by spi_unregister_master(). 657 + */ 658 + extern struct spi_device * 659 + spi_new_device(struct spi_master *, struct spi_board_info *); 660 + 661 + static inline void 662 + spi_unregister_device(struct spi_device *spi) 663 + { 664 + if (spi) 665 + device_unregister(&spi->dev); 666 + } 667 + 668 + #endif /* __LINUX_SPI_H */
+135
include/linux/spi/spi_bitbang.h
···
··· 1 + #ifndef __SPI_BITBANG_H 2 + #define __SPI_BITBANG_H 3 + 4 + /* 5 + * Mix this utility code with some glue code to get one of several types of 6 + * simple SPI master driver. Two do polled word-at-a-time I/O: 7 + * 8 + * - GPIO/parport bitbangers. Provide chipselect() and txrx_word[](), 9 + * expanding the per-word routines from the inline templates below. 10 + * 11 + * - Drivers for controllers resembling bare shift registers. Provide 12 + * chipselect() and txrx_word[](), with custom setup()/cleanup() methods 13 + * that use your controller's clock and chipselect registers. 14 + * 15 + * Some hardware works well with requests at spi_transfer scope: 16 + * 17 + * - Drivers leveraging smarter hardware, with fifos or DMA; or for half 18 + * duplex (MicroWire) controllers. Provide chipslect() and txrx_bufs(), 19 + * and custom setup()/cleanup() methods. 20 + */ 21 + struct spi_bitbang { 22 + struct workqueue_struct *workqueue; 23 + struct work_struct work; 24 + 25 + spinlock_t lock; 26 + struct list_head queue; 27 + u8 busy; 28 + u8 shutdown; 29 + u8 use_dma; 30 + 31 + struct spi_master *master; 32 + 33 + void (*chipselect)(struct spi_device *spi, int is_on); 34 + #define BITBANG_CS_ACTIVE 1 /* normally nCS, active low */ 35 + #define BITBANG_CS_INACTIVE 0 36 + 37 + /* txrx_bufs() may handle dma mapping for transfers that don't 38 + * already have one (transfer.{tx,rx}_dma is zero), or use PIO 39 + */ 40 + int (*txrx_bufs)(struct spi_device *spi, struct spi_transfer *t); 41 + 42 + /* txrx_word[SPI_MODE_*]() just looks like a shift register */ 43 + u32 (*txrx_word[4])(struct spi_device *spi, 44 + unsigned nsecs, 45 + u32 word, u8 bits); 46 + }; 47 + 48 + /* you can call these default bitbang->master methods from your custom 49 + * methods, if you like. 50 + */ 51 + extern int spi_bitbang_setup(struct spi_device *spi); 52 + extern void spi_bitbang_cleanup(const struct spi_device *spi); 53 + extern int spi_bitbang_transfer(struct spi_device *spi, struct spi_message *m); 54 + 55 + /* start or stop queue processing */ 56 + extern int spi_bitbang_start(struct spi_bitbang *spi); 57 + extern int spi_bitbang_stop(struct spi_bitbang *spi); 58 + 59 + #endif /* __SPI_BITBANG_H */ 60 + 61 + /*-------------------------------------------------------------------------*/ 62 + 63 + #ifdef EXPAND_BITBANG_TXRX 64 + 65 + /* 66 + * The code that knows what GPIO pins do what should have declared four 67 + * functions, ideally as inlines, before #defining EXPAND_BITBANG_TXRX 68 + * and including this header: 69 + * 70 + * void setsck(struct spi_device *, int is_on); 71 + * void setmosi(struct spi_device *, int is_on); 72 + * int getmiso(struct spi_device *); 73 + * void spidelay(unsigned); 74 + * 75 + * A non-inlined routine would call bitbang_txrx_*() routines. The 76 + * main loop could easily compile down to a handful of instructions, 77 + * especially if the delay is a NOP (to run at peak speed). 78 + * 79 + * Since this is software, the timings may not be exactly what your board's 80 + * chips need ... there may be several reasons you'd need to tweak timings 81 + * in these routines, not just make to make it faster or slower to match a 82 + * particular CPU clock rate. 83 + */ 84 + 85 + static inline u32 86 + bitbang_txrx_be_cpha0(struct spi_device *spi, 87 + unsigned nsecs, unsigned cpol, 88 + u32 word, u8 bits) 89 + { 90 + /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */ 91 + 92 + /* clock starts at inactive polarity */ 93 + for (word <<= (32 - bits); likely(bits); bits--) { 94 + 95 + /* setup MSB (to slave) on trailing edge */ 96 + setmosi(spi, word & (1 << 31)); 97 + spidelay(nsecs); /* T(setup) */ 98 + 99 + setsck(spi, !cpol); 100 + spidelay(nsecs); 101 + 102 + /* sample MSB (from slave) on leading edge */ 103 + word <<= 1; 104 + word |= getmiso(spi); 105 + setsck(spi, cpol); 106 + } 107 + return word; 108 + } 109 + 110 + static inline u32 111 + bitbang_txrx_be_cpha1(struct spi_device *spi, 112 + unsigned nsecs, unsigned cpol, 113 + u32 word, u8 bits) 114 + { 115 + /* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */ 116 + 117 + /* clock starts at inactive polarity */ 118 + for (word <<= (32 - bits); likely(bits); bits--) { 119 + 120 + /* setup MSB (to slave) on leading edge */ 121 + setsck(spi, !cpol); 122 + setmosi(spi, word & (1 << 31)); 123 + spidelay(nsecs); /* T(setup) */ 124 + 125 + setsck(spi, cpol); 126 + spidelay(nsecs); 127 + 128 + /* sample MSB (from slave) on trailing edge */ 129 + word <<= 1; 130 + word |= getmiso(spi); 131 + } 132 + return word; 133 + } 134 + 135 + #endif /* EXPAND_BITBANG_TXRX */