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 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 spi_gpio_request(struct spi_gpio_platform_data *pdata, 305 const char *label, u16 *res_flags) 306 { 307 int value; 308 309 /* NOTE: SPI_*_GPIO symbols may reference "pdata" */ 310 311 if (SPI_MOSI_GPIO != SPI_GPIO_NO_MOSI) { 312 value = spi_gpio_alloc(SPI_MOSI_GPIO, label, false); 313 if (value) 314 goto done; 315 } else { 316 /* HW configuration without MOSI pin */ 317 *res_flags |= SPI_MASTER_NO_TX; 318 } 319 320 if (SPI_MISO_GPIO != SPI_GPIO_NO_MISO) { 321 value = spi_gpio_alloc(SPI_MISO_GPIO, label, true); 322 if (value) 323 goto free_mosi; 324 } else { 325 /* HW configuration without MISO pin */ 326 *res_flags |= SPI_MASTER_NO_RX; 327 } 328 329 value = spi_gpio_alloc(SPI_SCK_GPIO, label, false); 330 if (value) 331 goto free_miso; 332 333 goto done; 334 335 free_miso: 336 if (SPI_MISO_GPIO != SPI_GPIO_NO_MISO) 337 gpio_free(SPI_MISO_GPIO); 338 free_mosi: 339 if (SPI_MOSI_GPIO != SPI_GPIO_NO_MOSI) 340 gpio_free(SPI_MOSI_GPIO); 341 done: 342 return value; 343 } 344 345 #ifdef CONFIG_OF 346 static struct of_device_id spi_gpio_dt_ids[] = { 347 { .compatible = "spi-gpio" }, 348 {} 349 }; 350 MODULE_DEVICE_TABLE(of, spi_gpio_dt_ids); 351 352 static int spi_gpio_probe_dt(struct platform_device *pdev) 353 { 354 int ret; 355 u32 tmp; 356 struct spi_gpio_platform_data *pdata; 357 struct device_node *np = pdev->dev.of_node; 358 const struct of_device_id *of_id = 359 of_match_device(spi_gpio_dt_ids, &pdev->dev); 360 361 if (!of_id) 362 return 0; 363 364 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 365 if (!pdata) 366 return -ENOMEM; 367 368 pdata->sck = of_get_named_gpio(np, "gpio-sck", 0); 369 pdata->miso = of_get_named_gpio(np, "gpio-miso", 0); 370 pdata->mosi = of_get_named_gpio(np, "gpio-mosi", 0); 371 372 ret = of_property_read_u32(np, "num-chipselects", &tmp); 373 if (ret < 0) { 374 dev_err(&pdev->dev, "num-chipselects property not found\n"); 375 goto error_free; 376 } 377 378 pdata->num_chipselect = tmp; 379 pdev->dev.platform_data = pdata; 380 381 return 1; 382 383 error_free: 384 devm_kfree(&pdev->dev, pdata); 385 return ret; 386 } 387 #else 388 static inline int spi_gpio_probe_dt(struct platform_device *pdev) 389 { 390 return 0; 391 } 392 #endif 393 394 static int spi_gpio_probe(struct platform_device *pdev) 395 { 396 int status; 397 struct spi_master *master; 398 struct spi_gpio *spi_gpio; 399 struct spi_gpio_platform_data *pdata; 400 u16 master_flags = 0; 401 bool use_of = 0; 402 403 status = spi_gpio_probe_dt(pdev); 404 if (status < 0) 405 return status; 406 if (status > 0) 407 use_of = 1; 408 409 pdata = pdev->dev.platform_data; 410 #ifdef GENERIC_BITBANG 411 if (!pdata || !pdata->num_chipselect) 412 return -ENODEV; 413 #endif 414 415 status = spi_gpio_request(pdata, dev_name(&pdev->dev), &master_flags); 416 if (status < 0) 417 return status; 418 419 master = spi_alloc_master(&pdev->dev, sizeof(*spi_gpio) + 420 (sizeof(int) * SPI_N_CHIPSEL)); 421 if (!master) { 422 status = -ENOMEM; 423 goto gpio_free; 424 } 425 spi_gpio = spi_master_get_devdata(master); 426 platform_set_drvdata(pdev, spi_gpio); 427 428 spi_gpio->pdev = pdev; 429 if (pdata) 430 spi_gpio->pdata = *pdata; 431 432 master->flags = master_flags; 433 master->bus_num = pdev->id; 434 master->num_chipselect = SPI_N_CHIPSEL; 435 master->setup = spi_gpio_setup; 436 master->cleanup = spi_gpio_cleanup; 437 #ifdef CONFIG_OF 438 master->dev.of_node = pdev->dev.of_node; 439 440 if (use_of) { 441 int i; 442 struct device_node *np = pdev->dev.of_node; 443 444 /* 445 * In DT environments, take the CS GPIO from the "cs-gpios" 446 * property of the node. 447 */ 448 449 for (i = 0; i < SPI_N_CHIPSEL; i++) 450 spi_gpio->cs_gpios[i] = 451 of_get_named_gpio(np, "cs-gpios", i); 452 } 453 #endif 454 455 spi_gpio->bitbang.master = spi_master_get(master); 456 spi_gpio->bitbang.chipselect = spi_gpio_chipselect; 457 458 if ((master_flags & (SPI_MASTER_NO_TX | SPI_MASTER_NO_RX)) == 0) { 459 spi_gpio->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_word_mode0; 460 spi_gpio->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_word_mode1; 461 spi_gpio->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_word_mode2; 462 spi_gpio->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_word_mode3; 463 } else { 464 spi_gpio->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_spec_txrx_word_mode0; 465 spi_gpio->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_spec_txrx_word_mode1; 466 spi_gpio->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_spec_txrx_word_mode2; 467 spi_gpio->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_spec_txrx_word_mode3; 468 } 469 spi_gpio->bitbang.setup_transfer = spi_bitbang_setup_transfer; 470 spi_gpio->bitbang.flags = SPI_CS_HIGH; 471 472 status = spi_bitbang_start(&spi_gpio->bitbang); 473 if (status < 0) { 474 spi_master_put(spi_gpio->bitbang.master); 475 gpio_free: 476 if (SPI_MISO_GPIO != SPI_GPIO_NO_MISO) 477 gpio_free(SPI_MISO_GPIO); 478 if (SPI_MOSI_GPIO != SPI_GPIO_NO_MOSI) 479 gpio_free(SPI_MOSI_GPIO); 480 gpio_free(SPI_SCK_GPIO); 481 spi_master_put(master); 482 } 483 484 return status; 485 } 486 487 static int spi_gpio_remove(struct platform_device *pdev) 488 { 489 struct spi_gpio *spi_gpio; 490 struct spi_gpio_platform_data *pdata; 491 int status; 492 493 spi_gpio = platform_get_drvdata(pdev); 494 pdata = pdev->dev.platform_data; 495 496 /* stop() unregisters child devices too */ 497 status = spi_bitbang_stop(&spi_gpio->bitbang); 498 spi_master_put(spi_gpio->bitbang.master); 499 500 platform_set_drvdata(pdev, NULL); 501 502 if (SPI_MISO_GPIO != SPI_GPIO_NO_MISO) 503 gpio_free(SPI_MISO_GPIO); 504 if (SPI_MOSI_GPIO != SPI_GPIO_NO_MOSI) 505 gpio_free(SPI_MOSI_GPIO); 506 gpio_free(SPI_SCK_GPIO); 507 508 return status; 509 } 510 511 MODULE_ALIAS("platform:" DRIVER_NAME); 512 513 static struct platform_driver spi_gpio_driver = { 514 .driver = { 515 .name = DRIVER_NAME, 516 .owner = THIS_MODULE, 517 .of_match_table = of_match_ptr(spi_gpio_dt_ids), 518 }, 519 .probe = spi_gpio_probe, 520 .remove = spi_gpio_remove, 521 }; 522 module_platform_driver(spi_gpio_driver); 523 524 MODULE_DESCRIPTION("SPI master driver using generic bitbanged GPIO "); 525 MODULE_AUTHOR("David Brownell"); 526 MODULE_LICENSE("GPL"); 527