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