1 /* 2 * SPI master driver using generic bitbanged GPIO 3 * 4 * Copyright (C) 2006,2008 David Brownell 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 */ 20 #include <linux/kernel.h> 21 #include <linux/module.h> 22 #include <linux/init.h> 23 #include <linux/platform_device.h> 24 #include <linux/gpio.h> 25 #include <linux/of_device.h> 26 #include <linux/of_gpio.h> 27 28 #include <linux/spi/spi.h> 29 #include <linux/spi/spi_bitbang.h> 30 #include <linux/spi/spi_gpio.h> 31 32 33 /* 34 * This bitbanging SPI master driver should help make systems usable 35 * when a native hardware SPI engine is not available, perhaps because 36 * its driver isn't yet working or because the I/O pins it requires 37 * are used for other purposes. 38 * 39 * platform_device->driver_data ... points to spi_gpio 40 * 41 * spi->controller_state ... reserved for bitbang framework code 42 * spi->controller_data ... holds chipselect GPIO 43 * 44 * spi->master->dev.driver_data ... points to spi_gpio->bitbang 45 */ 46 47 struct spi_gpio { 48 struct spi_bitbang bitbang; 49 struct spi_gpio_platform_data pdata; 50 struct platform_device *pdev; 51 int cs_gpios[0]; 52 }; 53 54 /*----------------------------------------------------------------------*/ 55 56 /* 57 * Because the overhead of going through four GPIO procedure calls 58 * per transferred bit can make performance a problem, this code 59 * is set up so that you can use it in either of two ways: 60 * 61 * - The slow generic way: set up platform_data to hold the GPIO 62 * numbers used for MISO/MOSI/SCK, and issue procedure calls for 63 * each of them. This driver can handle several such busses. 64 * 65 * - The quicker inlined way: only helps with platform GPIO code 66 * that inlines operations for constant GPIOs. This can give 67 * you tight (fast!) inner loops, but each such bus needs a 68 * new driver. You'll define a new C file, with Makefile and 69 * Kconfig support; the C code can be a total of six lines: 70 * 71 * #define DRIVER_NAME "myboard_spi2" 72 * #define SPI_MISO_GPIO 119 73 * #define SPI_MOSI_GPIO 120 74 * #define SPI_SCK_GPIO 121 75 * #define SPI_N_CHIPSEL 4 76 * #include "spi-gpio.c" 77 */ 78 79 #ifndef DRIVER_NAME 80 #define DRIVER_NAME "spi_gpio" 81 82 #define GENERIC_BITBANG /* vs tight inlines */ 83 84 /* all functions referencing these symbols must define pdata */ 85 #define SPI_MISO_GPIO ((pdata)->miso) 86 #define SPI_MOSI_GPIO ((pdata)->mosi) 87 #define SPI_SCK_GPIO ((pdata)->sck) 88 89 #define SPI_N_CHIPSEL ((pdata)->num_chipselect) 90 91 #endif 92 93 /*----------------------------------------------------------------------*/ 94 95 static inline struct spi_gpio * __pure 96 spi_to_spi_gpio(const struct spi_device *spi) 97 { 98 const struct spi_bitbang *bang; 99 struct spi_gpio *spi_gpio; 100 101 bang = spi_master_get_devdata(spi->master); 102 spi_gpio = container_of(bang, struct spi_gpio, bitbang); 103 return spi_gpio; 104 } 105 106 static inline struct spi_gpio_platform_data * __pure 107 spi_to_pdata(const struct spi_device *spi) 108 { 109 return &spi_to_spi_gpio(spi)->pdata; 110 } 111 112 /* this is #defined to avoid unused-variable warnings when inlining */ 113 #define pdata spi_to_pdata(spi) 114 115 static inline void setsck(const struct spi_device *spi, int is_on) 116 { 117 gpio_set_value(SPI_SCK_GPIO, is_on); 118 } 119 120 static inline void setmosi(const struct spi_device *spi, int is_on) 121 { 122 gpio_set_value(SPI_MOSI_GPIO, is_on); 123 } 124 125 static inline int getmiso(const struct spi_device *spi) 126 { 127 return !!gpio_get_value(SPI_MISO_GPIO); 128 } 129 130 #undef pdata 131 132 /* 133 * NOTE: this clocks "as fast as we can". It "should" be a function of the 134 * requested device clock. Software overhead means we usually have trouble 135 * reaching even one Mbit/sec (except when we can inline bitops), so for now 136 * we'll just assume we never need additional per-bit slowdowns. 137 */ 138 #define spidelay(nsecs) do {} while (0) 139 140 #include "spi-bitbang-txrx.h" 141 142 /* 143 * These functions can leverage inline expansion of GPIO calls to shrink 144 * costs for a txrx bit, often by factors of around ten (by instruction 145 * count). That is particularly visible for larger word sizes, but helps 146 * even with default 8-bit words. 147 * 148 * REVISIT overheads calling these functions for each word also have 149 * significant performance costs. Having txrx_bufs() calls that inline 150 * the txrx_word() logic would help performance, e.g. on larger blocks 151 * used with flash storage or MMC/SD. There should also be ways to make 152 * GCC be less stupid about reloading registers inside the I/O loops, 153 * even without inlined GPIO calls; __attribute__((hot)) on GCC 4.3? 154 */ 155 156 static u32 spi_gpio_txrx_word_mode0(struct spi_device *spi, 157 unsigned nsecs, u32 word, u8 bits) 158 { 159 return bitbang_txrx_be_cpha0(spi, nsecs, 0, 0, word, bits); 160 } 161 162 static u32 spi_gpio_txrx_word_mode1(struct spi_device *spi, 163 unsigned nsecs, u32 word, u8 bits) 164 { 165 return bitbang_txrx_be_cpha1(spi, nsecs, 0, 0, word, bits); 166 } 167 168 static u32 spi_gpio_txrx_word_mode2(struct spi_device *spi, 169 unsigned nsecs, u32 word, u8 bits) 170 { 171 return bitbang_txrx_be_cpha0(spi, nsecs, 1, 0, word, bits); 172 } 173 174 static u32 spi_gpio_txrx_word_mode3(struct spi_device *spi, 175 unsigned nsecs, u32 word, u8 bits) 176 { 177 return bitbang_txrx_be_cpha1(spi, nsecs, 1, 0, word, bits); 178 } 179 180 /* 181 * These functions do not call setmosi or getmiso if respective flag 182 * (SPI_MASTER_NO_RX or SPI_MASTER_NO_TX) is set, so they are safe to 183 * call when such pin is not present or defined in the controller. 184 * A separate set of callbacks is defined to get highest possible 185 * speed in the generic case (when both MISO and MOSI lines are 186 * available), as optimiser will remove the checks when argument is 187 * constant. 188 */ 189 190 static u32 spi_gpio_spec_txrx_word_mode0(struct spi_device *spi, 191 unsigned nsecs, u32 word, u8 bits) 192 { 193 unsigned flags = spi->master->flags; 194 return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); 195 } 196 197 static u32 spi_gpio_spec_txrx_word_mode1(struct spi_device *spi, 198 unsigned nsecs, u32 word, u8 bits) 199 { 200 unsigned flags = spi->master->flags; 201 return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); 202 } 203 204 static u32 spi_gpio_spec_txrx_word_mode2(struct spi_device *spi, 205 unsigned nsecs, u32 word, u8 bits) 206 { 207 unsigned flags = spi->master->flags; 208 return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); 209 } 210 211 static u32 spi_gpio_spec_txrx_word_mode3(struct spi_device *spi, 212 unsigned nsecs, u32 word, u8 bits) 213 { 214 unsigned flags = spi->master->flags; 215 return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); 216 } 217 218 /*----------------------------------------------------------------------*/ 219 220 static void spi_gpio_chipselect(struct spi_device *spi, int is_active) 221 { 222 struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi); 223 unsigned int cs = spi_gpio->cs_gpios[spi->chip_select]; 224 225 /* set initial clock polarity */ 226 if (is_active) 227 setsck(spi, spi->mode & SPI_CPOL); 228 229 if (cs != SPI_GPIO_NO_CHIPSELECT) { 230 /* SPI is normally active-low */ 231 gpio_set_value(cs, (spi->mode & SPI_CS_HIGH) ? is_active : !is_active); 232 } 233 } 234 235 static int spi_gpio_setup(struct spi_device *spi) 236 { 237 unsigned int cs; 238 int status = 0; 239 struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi); 240 struct device_node *np = spi->master->dev.of_node; 241 242 if (spi->bits_per_word > 32) 243 return -EINVAL; 244 245 if (np) { 246 /* 247 * In DT environments, the CS GPIOs have already been 248 * initialized from the "cs-gpios" property of the node. 249 */ 250 cs = spi_gpio->cs_gpios[spi->chip_select]; 251 } else { 252 /* 253 * ... otherwise, take it from spi->controller_data 254 */ 255 cs = (unsigned int) spi->controller_data; 256 } 257 258 if (!spi->controller_state) { 259 if (cs != SPI_GPIO_NO_CHIPSELECT) { 260 status = gpio_request(cs, dev_name(&spi->dev)); 261 if (status) 262 return status; 263 status = gpio_direction_output(cs, 264 !(spi->mode & SPI_CS_HIGH)); 265 } 266 } 267 if (!status) { 268 status = spi_bitbang_setup(spi); 269 /* in case it was initialized from static board data */ 270 spi_gpio->cs_gpios[spi->chip_select] = cs; 271 } 272 273 if (status) { 274 if (!spi->controller_state && cs != SPI_GPIO_NO_CHIPSELECT) 275 gpio_free(cs); 276 } 277 return status; 278 } 279 280 static void spi_gpio_cleanup(struct spi_device *spi) 281 { 282 struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi); 283 unsigned int cs = spi_gpio->cs_gpios[spi->chip_select]; 284 285 if (cs != SPI_GPIO_NO_CHIPSELECT) 286 gpio_free(cs); 287 spi_bitbang_cleanup(spi); 288 } 289 290 static int __devinit spi_gpio_alloc(unsigned pin, const char *label, bool is_in) 291 { 292 int value; 293 294 value = gpio_request(pin, label); 295 if (value == 0) { 296 if (is_in) 297 value = gpio_direction_input(pin); 298 else 299 value = gpio_direction_output(pin, 0); 300 } 301 return value; 302 } 303 304 static int __devinit 305 spi_gpio_request(struct spi_gpio_platform_data *pdata, const char *label, 306 u16 *res_flags) 307 { 308 int value; 309 310 /* NOTE: SPI_*_GPIO symbols may reference "pdata" */ 311 312 if (SPI_MOSI_GPIO != SPI_GPIO_NO_MOSI) { 313 value = spi_gpio_alloc(SPI_MOSI_GPIO, label, false); 314 if (value) 315 goto done; 316 } else { 317 /* HW configuration without MOSI pin */ 318 *res_flags |= SPI_MASTER_NO_TX; 319 } 320 321 if (SPI_MISO_GPIO != SPI_GPIO_NO_MISO) { 322 value = spi_gpio_alloc(SPI_MISO_GPIO, label, true); 323 if (value) 324 goto free_mosi; 325 } else { 326 /* HW configuration without MISO pin */ 327 *res_flags |= SPI_MASTER_NO_RX; 328 } 329 330 value = spi_gpio_alloc(SPI_SCK_GPIO, label, false); 331 if (value) 332 goto free_miso; 333 334 goto done; 335 336 free_miso: 337 if (SPI_MISO_GPIO != SPI_GPIO_NO_MISO) 338 gpio_free(SPI_MISO_GPIO); 339 free_mosi: 340 if (SPI_MOSI_GPIO != SPI_GPIO_NO_MOSI) 341 gpio_free(SPI_MOSI_GPIO); 342 done: 343 return value; 344 } 345 346 #ifdef CONFIG_OF 347 static struct of_device_id spi_gpio_dt_ids[] = { 348 { .compatible = "spi-gpio" }, 349 {} 350 }; 351 MODULE_DEVICE_TABLE(of, spi_gpio_dt_ids); 352 353 static int spi_gpio_probe_dt(struct platform_device *pdev) 354 { 355 int ret; 356 u32 tmp; 357 struct spi_gpio_platform_data *pdata; 358 struct device_node *np = pdev->dev.of_node; 359 const struct of_device_id *of_id = 360 of_match_device(spi_gpio_dt_ids, &pdev->dev); 361 362 if (!of_id) 363 return 0; 364 365 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 366 if (!pdata) 367 return -ENOMEM; 368 369 pdata->sck = of_get_named_gpio(np, "gpio-sck", 0); 370 pdata->miso = of_get_named_gpio(np, "gpio-miso", 0); 371 pdata->mosi = of_get_named_gpio(np, "gpio-mosi", 0); 372 373 ret = of_property_read_u32(np, "num-chipselects", &tmp); 374 if (ret < 0) { 375 dev_err(&pdev->dev, "num-chipselects property not found\n"); 376 goto error_free; 377 } 378 379 pdata->num_chipselect = tmp; 380 pdev->dev.platform_data = pdata; 381 382 return 1; 383 384 error_free: 385 devm_kfree(&pdev->dev, pdata); 386 return ret; 387 } 388 #else 389 static inline int spi_gpio_probe_dt(struct platform_device *pdev) 390 { 391 return 0; 392 } 393 #endif 394 395 static int __devinit spi_gpio_probe(struct platform_device *pdev) 396 { 397 int status; 398 struct spi_master *master; 399 struct spi_gpio *spi_gpio; 400 struct spi_gpio_platform_data *pdata; 401 u16 master_flags = 0; 402 bool use_of = 0; 403 404 status = spi_gpio_probe_dt(pdev); 405 if (status < 0) 406 return status; 407 if (status > 0) 408 use_of = 1; 409 410 pdata = pdev->dev.platform_data; 411 #ifdef GENERIC_BITBANG 412 if (!pdata || !pdata->num_chipselect) 413 return -ENODEV; 414 #endif 415 416 status = spi_gpio_request(pdata, dev_name(&pdev->dev), &master_flags); 417 if (status < 0) 418 return status; 419 420 master = spi_alloc_master(&pdev->dev, sizeof(*spi_gpio) + 421 (sizeof(int) * SPI_N_CHIPSEL)); 422 if (!master) { 423 status = -ENOMEM; 424 goto gpio_free; 425 } 426 spi_gpio = spi_master_get_devdata(master); 427 platform_set_drvdata(pdev, spi_gpio); 428 429 spi_gpio->pdev = pdev; 430 if (pdata) 431 spi_gpio->pdata = *pdata; 432 433 master->flags = master_flags; 434 master->bus_num = pdev->id; 435 master->num_chipselect = SPI_N_CHIPSEL; 436 master->setup = spi_gpio_setup; 437 master->cleanup = spi_gpio_cleanup; 438 #ifdef CONFIG_OF 439 master->dev.of_node = pdev->dev.of_node; 440 441 if (use_of) { 442 int i; 443 struct device_node *np = pdev->dev.of_node; 444 445 /* 446 * In DT environments, take the CS GPIO from the "cs-gpios" 447 * property of the node. 448 */ 449 450 for (i = 0; i < SPI_N_CHIPSEL; i++) 451 spi_gpio->cs_gpios[i] = 452 of_get_named_gpio(np, "cs-gpios", i); 453 } 454 #endif 455 456 spi_gpio->bitbang.master = spi_master_get(master); 457 spi_gpio->bitbang.chipselect = spi_gpio_chipselect; 458 459 if ((master_flags & (SPI_MASTER_NO_TX | SPI_MASTER_NO_RX)) == 0) { 460 spi_gpio->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_word_mode0; 461 spi_gpio->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_word_mode1; 462 spi_gpio->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_word_mode2; 463 spi_gpio->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_word_mode3; 464 } else { 465 spi_gpio->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_spec_txrx_word_mode0; 466 spi_gpio->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_spec_txrx_word_mode1; 467 spi_gpio->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_spec_txrx_word_mode2; 468 spi_gpio->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_spec_txrx_word_mode3; 469 } 470 spi_gpio->bitbang.setup_transfer = spi_bitbang_setup_transfer; 471 spi_gpio->bitbang.flags = SPI_CS_HIGH; 472 473 status = spi_bitbang_start(&spi_gpio->bitbang); 474 if (status < 0) { 475 spi_master_put(spi_gpio->bitbang.master); 476 gpio_free: 477 if (SPI_MISO_GPIO != SPI_GPIO_NO_MISO) 478 gpio_free(SPI_MISO_GPIO); 479 if (SPI_MOSI_GPIO != SPI_GPIO_NO_MOSI) 480 gpio_free(SPI_MOSI_GPIO); 481 gpio_free(SPI_SCK_GPIO); 482 spi_master_put(master); 483 } 484 485 return status; 486 } 487 488 static int __devexit spi_gpio_remove(struct platform_device *pdev) 489 { 490 struct spi_gpio *spi_gpio; 491 struct spi_gpio_platform_data *pdata; 492 int status; 493 494 spi_gpio = platform_get_drvdata(pdev); 495 pdata = pdev->dev.platform_data; 496 497 /* stop() unregisters child devices too */ 498 status = spi_bitbang_stop(&spi_gpio->bitbang); 499 spi_master_put(spi_gpio->bitbang.master); 500 501 platform_set_drvdata(pdev, NULL); 502 503 if (SPI_MISO_GPIO != SPI_GPIO_NO_MISO) 504 gpio_free(SPI_MISO_GPIO); 505 if (SPI_MOSI_GPIO != SPI_GPIO_NO_MOSI) 506 gpio_free(SPI_MOSI_GPIO); 507 gpio_free(SPI_SCK_GPIO); 508 509 return status; 510 } 511 512 MODULE_ALIAS("platform:" DRIVER_NAME); 513 514 static struct platform_driver spi_gpio_driver = { 515 .driver = { 516 .name = DRIVER_NAME, 517 .owner = THIS_MODULE, 518 .of_match_table = of_match_ptr(spi_gpio_dt_ids), 519 }, 520 .probe = spi_gpio_probe, 521 .remove = __devexit_p(spi_gpio_remove), 522 }; 523 module_platform_driver(spi_gpio_driver); 524 525 MODULE_DESCRIPTION("SPI master driver using generic bitbanged GPIO "); 526 MODULE_AUTHOR("David Brownell"); 527 MODULE_LICENSE("GPL"); 528