Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio: msc313: Add support for SSD201 and SSD202D

This adds GPIO support for the SSD201 and SSD202D chips.

Signed-off-by: Daniel Palmer <daniel@0x0f.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>

authored by

Daniel Palmer and committed by
Bartosz Golaszewski
572006bc bef4460b

+261
+261
drivers/gpio/gpio-msc313.c
··· 221 221 }; 222 222 223 223 MSC313_GPIO_CHIPDATA(msc313); 224 + 225 + /* 226 + * Unlike the msc313(e) the ssd20xd have a bunch of pins 227 + * that are actually called gpio probably because they 228 + * have no dedicated function. 229 + */ 230 + #define SSD20XD_PINNAME_GPIO0 "gpio0" 231 + #define SSD20XD_PINNAME_GPIO1 "gpio1" 232 + #define SSD20XD_PINNAME_GPIO2 "gpio2" 233 + #define SSD20XD_PINNAME_GPIO3 "gpio3" 234 + #define SSD20XD_PINNAME_GPIO4 "gpio4" 235 + #define SSD20XD_PINNAME_GPIO5 "gpio5" 236 + #define SSD20XD_PINNAME_GPIO6 "gpio6" 237 + #define SSD20XD_PINNAME_GPIO7 "gpio7" 238 + #define SSD20XD_PINNAME_GPIO10 "gpio10" 239 + #define SSD20XD_PINNAME_GPIO11 "gpio11" 240 + #define SSD20XD_PINNAME_GPIO12 "gpio12" 241 + #define SSD20XD_PINNAME_GPIO13 "gpio13" 242 + #define SSD20XD_PINNAME_GPIO14 "gpio14" 243 + #define SSD20XD_PINNAME_GPIO85 "gpio85" 244 + #define SSD20XD_PINNAME_GPIO86 "gpio86" 245 + #define SSD20XD_PINNAME_GPIO90 "gpio90" 246 + 247 + #define SSD20XD_GPIO_NAMES SSD20XD_PINNAME_GPIO0, \ 248 + SSD20XD_PINNAME_GPIO1, \ 249 + SSD20XD_PINNAME_GPIO2, \ 250 + SSD20XD_PINNAME_GPIO3, \ 251 + SSD20XD_PINNAME_GPIO4, \ 252 + SSD20XD_PINNAME_GPIO5, \ 253 + SSD20XD_PINNAME_GPIO6, \ 254 + SSD20XD_PINNAME_GPIO7, \ 255 + SSD20XD_PINNAME_GPIO10, \ 256 + SSD20XD_PINNAME_GPIO11, \ 257 + SSD20XD_PINNAME_GPIO12, \ 258 + SSD20XD_PINNAME_GPIO13, \ 259 + SSD20XD_PINNAME_GPIO14, \ 260 + SSD20XD_PINNAME_GPIO85, \ 261 + SSD20XD_PINNAME_GPIO86, \ 262 + SSD20XD_PINNAME_GPIO90 263 + 264 + #define SSD20XD_GPIO_OFF_GPIO0 0x0 265 + #define SSD20XD_GPIO_OFF_GPIO1 0x4 266 + #define SSD20XD_GPIO_OFF_GPIO2 0x8 267 + #define SSD20XD_GPIO_OFF_GPIO3 0xc 268 + #define SSD20XD_GPIO_OFF_GPIO4 0x10 269 + #define SSD20XD_GPIO_OFF_GPIO5 0x14 270 + #define SSD20XD_GPIO_OFF_GPIO6 0x18 271 + #define SSD20XD_GPIO_OFF_GPIO7 0x1c 272 + #define SSD20XD_GPIO_OFF_GPIO10 0x28 273 + #define SSD20XD_GPIO_OFF_GPIO11 0x2c 274 + #define SSD20XD_GPIO_OFF_GPIO12 0x30 275 + #define SSD20XD_GPIO_OFF_GPIO13 0x34 276 + #define SSD20XD_GPIO_OFF_GPIO14 0x38 277 + #define SSD20XD_GPIO_OFF_GPIO85 0x100 278 + #define SSD20XD_GPIO_OFF_GPIO86 0x104 279 + #define SSD20XD_GPIO_OFF_GPIO90 0x114 280 + 281 + #define SSD20XD_GPIO_OFFSETS SSD20XD_GPIO_OFF_GPIO0, \ 282 + SSD20XD_GPIO_OFF_GPIO1, \ 283 + SSD20XD_GPIO_OFF_GPIO2, \ 284 + SSD20XD_GPIO_OFF_GPIO3, \ 285 + SSD20XD_GPIO_OFF_GPIO4, \ 286 + SSD20XD_GPIO_OFF_GPIO5, \ 287 + SSD20XD_GPIO_OFF_GPIO6, \ 288 + SSD20XD_GPIO_OFF_GPIO7, \ 289 + SSD20XD_GPIO_OFF_GPIO10, \ 290 + SSD20XD_GPIO_OFF_GPIO11, \ 291 + SSD20XD_GPIO_OFF_GPIO12, \ 292 + SSD20XD_GPIO_OFF_GPIO13, \ 293 + SSD20XD_GPIO_OFF_GPIO14, \ 294 + SSD20XD_GPIO_OFF_GPIO85, \ 295 + SSD20XD_GPIO_OFF_GPIO86, \ 296 + SSD20XD_GPIO_OFF_GPIO90 297 + 298 + /* "ttl" pins lcd interface pins */ 299 + #define SSD20XD_PINNAME_TTL0 "ttl0" 300 + #define SSD20XD_PINNAME_TTL1 "ttl1" 301 + #define SSD20XD_PINNAME_TTL2 "ttl2" 302 + #define SSD20XD_PINNAME_TTL3 "ttl3" 303 + #define SSD20XD_PINNAME_TTL4 "ttl4" 304 + #define SSD20XD_PINNAME_TTL5 "ttl5" 305 + #define SSD20XD_PINNAME_TTL6 "ttl6" 306 + #define SSD20XD_PINNAME_TTL7 "ttl7" 307 + #define SSD20XD_PINNAME_TTL8 "ttl8" 308 + #define SSD20XD_PINNAME_TTL9 "ttl9" 309 + #define SSD20XD_PINNAME_TTL10 "ttl10" 310 + #define SSD20XD_PINNAME_TTL11 "ttl11" 311 + #define SSD20XD_PINNAME_TTL12 "ttl12" 312 + #define SSD20XD_PINNAME_TTL13 "ttl13" 313 + #define SSD20XD_PINNAME_TTL14 "ttl14" 314 + #define SSD20XD_PINNAME_TTL15 "ttl15" 315 + #define SSD20XD_PINNAME_TTL16 "ttl16" 316 + #define SSD20XD_PINNAME_TTL17 "ttl17" 317 + #define SSD20XD_PINNAME_TTL18 "ttl18" 318 + #define SSD20XD_PINNAME_TTL19 "ttl19" 319 + #define SSD20XD_PINNAME_TTL20 "ttl20" 320 + #define SSD20XD_PINNAME_TTL21 "ttl21" 321 + #define SSD20XD_PINNAME_TTL22 "ttl22" 322 + #define SSD20XD_PINNAME_TTL23 "ttl23" 323 + #define SSD20XD_PINNAME_TTL24 "ttl24" 324 + #define SSD20XD_PINNAME_TTL25 "ttl25" 325 + #define SSD20XD_PINNAME_TTL26 "ttl26" 326 + #define SSD20XD_PINNAME_TTL27 "ttl27" 327 + 328 + #define SSD20XD_TTL_PINNAMES SSD20XD_PINNAME_TTL0, \ 329 + SSD20XD_PINNAME_TTL1, \ 330 + SSD20XD_PINNAME_TTL2, \ 331 + SSD20XD_PINNAME_TTL3, \ 332 + SSD20XD_PINNAME_TTL4, \ 333 + SSD20XD_PINNAME_TTL5, \ 334 + SSD20XD_PINNAME_TTL6, \ 335 + SSD20XD_PINNAME_TTL7, \ 336 + SSD20XD_PINNAME_TTL8, \ 337 + SSD20XD_PINNAME_TTL9, \ 338 + SSD20XD_PINNAME_TTL10, \ 339 + SSD20XD_PINNAME_TTL11, \ 340 + SSD20XD_PINNAME_TTL12, \ 341 + SSD20XD_PINNAME_TTL13, \ 342 + SSD20XD_PINNAME_TTL14, \ 343 + SSD20XD_PINNAME_TTL15, \ 344 + SSD20XD_PINNAME_TTL16, \ 345 + SSD20XD_PINNAME_TTL17, \ 346 + SSD20XD_PINNAME_TTL18, \ 347 + SSD20XD_PINNAME_TTL19, \ 348 + SSD20XD_PINNAME_TTL20, \ 349 + SSD20XD_PINNAME_TTL21, \ 350 + SSD20XD_PINNAME_TTL22, \ 351 + SSD20XD_PINNAME_TTL23, \ 352 + SSD20XD_PINNAME_TTL24, \ 353 + SSD20XD_PINNAME_TTL25, \ 354 + SSD20XD_PINNAME_TTL26, \ 355 + SSD20XD_PINNAME_TTL27 356 + 357 + #define SSD20XD_TTL_OFFSET_TTL0 0x80 358 + #define SSD20XD_TTL_OFFSET_TTL1 0x84 359 + #define SSD20XD_TTL_OFFSET_TTL2 0x88 360 + #define SSD20XD_TTL_OFFSET_TTL3 0x8c 361 + #define SSD20XD_TTL_OFFSET_TTL4 0x90 362 + #define SSD20XD_TTL_OFFSET_TTL5 0x94 363 + #define SSD20XD_TTL_OFFSET_TTL6 0x98 364 + #define SSD20XD_TTL_OFFSET_TTL7 0x9c 365 + #define SSD20XD_TTL_OFFSET_TTL8 0xa0 366 + #define SSD20XD_TTL_OFFSET_TTL9 0xa4 367 + #define SSD20XD_TTL_OFFSET_TTL10 0xa8 368 + #define SSD20XD_TTL_OFFSET_TTL11 0xac 369 + #define SSD20XD_TTL_OFFSET_TTL12 0xb0 370 + #define SSD20XD_TTL_OFFSET_TTL13 0xb4 371 + #define SSD20XD_TTL_OFFSET_TTL14 0xb8 372 + #define SSD20XD_TTL_OFFSET_TTL15 0xbc 373 + #define SSD20XD_TTL_OFFSET_TTL16 0xc0 374 + #define SSD20XD_TTL_OFFSET_TTL17 0xc4 375 + #define SSD20XD_TTL_OFFSET_TTL18 0xc8 376 + #define SSD20XD_TTL_OFFSET_TTL19 0xcc 377 + #define SSD20XD_TTL_OFFSET_TTL20 0xd0 378 + #define SSD20XD_TTL_OFFSET_TTL21 0xd4 379 + #define SSD20XD_TTL_OFFSET_TTL22 0xd8 380 + #define SSD20XD_TTL_OFFSET_TTL23 0xdc 381 + #define SSD20XD_TTL_OFFSET_TTL24 0xe0 382 + #define SSD20XD_TTL_OFFSET_TTL25 0xe4 383 + #define SSD20XD_TTL_OFFSET_TTL26 0xe8 384 + #define SSD20XD_TTL_OFFSET_TTL27 0xec 385 + 386 + #define SSD20XD_TTL_OFFSETS SSD20XD_TTL_OFFSET_TTL0, \ 387 + SSD20XD_TTL_OFFSET_TTL1, \ 388 + SSD20XD_TTL_OFFSET_TTL2, \ 389 + SSD20XD_TTL_OFFSET_TTL3, \ 390 + SSD20XD_TTL_OFFSET_TTL4, \ 391 + SSD20XD_TTL_OFFSET_TTL5, \ 392 + SSD20XD_TTL_OFFSET_TTL6, \ 393 + SSD20XD_TTL_OFFSET_TTL7, \ 394 + SSD20XD_TTL_OFFSET_TTL8, \ 395 + SSD20XD_TTL_OFFSET_TTL9, \ 396 + SSD20XD_TTL_OFFSET_TTL10, \ 397 + SSD20XD_TTL_OFFSET_TTL11, \ 398 + SSD20XD_TTL_OFFSET_TTL12, \ 399 + SSD20XD_TTL_OFFSET_TTL13, \ 400 + SSD20XD_TTL_OFFSET_TTL14, \ 401 + SSD20XD_TTL_OFFSET_TTL15, \ 402 + SSD20XD_TTL_OFFSET_TTL16, \ 403 + SSD20XD_TTL_OFFSET_TTL17, \ 404 + SSD20XD_TTL_OFFSET_TTL18, \ 405 + SSD20XD_TTL_OFFSET_TTL19, \ 406 + SSD20XD_TTL_OFFSET_TTL20, \ 407 + SSD20XD_TTL_OFFSET_TTL21, \ 408 + SSD20XD_TTL_OFFSET_TTL22, \ 409 + SSD20XD_TTL_OFFSET_TTL23, \ 410 + SSD20XD_TTL_OFFSET_TTL24, \ 411 + SSD20XD_TTL_OFFSET_TTL25, \ 412 + SSD20XD_TTL_OFFSET_TTL26, \ 413 + SSD20XD_TTL_OFFSET_TTL27 414 + 415 + /* On the ssd20xd the two normal uarts have dedicated pins */ 416 + #define SSD20XD_PINNAME_UART0_RX "uart0_rx" 417 + #define SSD20XD_PINNAME_UART0_TX "uart0_tx" 418 + 419 + #define SSD20XD_UART0_NAMES \ 420 + SSD20XD_PINNAME_UART0_RX, \ 421 + SSD20XD_PINNAME_UART0_TX 422 + 423 + #define SSD20XD_PINNAME_UART1_RX "uart1_rx" 424 + #define SSD20XD_PINNAME_UART1_TX "uart1_tx" 425 + 426 + #define SSD20XD_UART1_NAMES \ 427 + SSD20XD_PINNAME_UART1_RX, \ 428 + SSD20XD_PINNAME_UART1_TX 429 + 430 + #define SSD20XD_OFF_UART0_RX 0x60 431 + #define SSD20XD_OFF_UART0_TX 0x64 432 + 433 + #define SSD20XD_UART0_OFFSETS \ 434 + SSD20XD_OFF_UART0_RX, \ 435 + SSD20XD_OFF_UART0_TX 436 + 437 + #define SSD20XD_OFF_UART1_RX 0x68 438 + #define SSD20XD_OFF_UART1_TX 0x6c 439 + 440 + #define SSD20XD_UART1_OFFSETS \ 441 + SSD20XD_OFF_UART1_RX, \ 442 + SSD20XD_OFF_UART1_TX 443 + 444 + /* 445 + * ssd20x has the same pin names but different ordering 446 + * of the registers that control the gpio. 447 + */ 448 + #define SSD20XD_OFF_SD_D0 0x140 449 + #define SSD20XD_OFF_SD_D1 0x144 450 + #define SSD20XD_OFF_SD_D2 0x148 451 + #define SSD20XD_OFF_SD_D3 0x14c 452 + #define SSD20XD_OFF_SD_CMD 0x150 453 + #define SSD20XD_OFF_SD_CLK 0x154 454 + 455 + #define SSD20XD_SD_OFFSETS SSD20XD_OFF_SD_CLK, \ 456 + SSD20XD_OFF_SD_CMD, \ 457 + SSD20XD_OFF_SD_D0, \ 458 + SSD20XD_OFF_SD_D1, \ 459 + SSD20XD_OFF_SD_D2, \ 460 + SSD20XD_OFF_SD_D3 461 + 462 + static const char * const ssd20xd_names[] = { 463 + FUART_NAMES, 464 + SD_NAMES, 465 + SSD20XD_UART0_NAMES, 466 + SSD20XD_UART1_NAMES, 467 + SSD20XD_TTL_PINNAMES, 468 + SSD20XD_GPIO_NAMES, 469 + }; 470 + 471 + static const unsigned int ssd20xd_offsets[] = { 472 + FUART_OFFSETS, 473 + SSD20XD_SD_OFFSETS, 474 + SSD20XD_UART0_OFFSETS, 475 + SSD20XD_UART1_OFFSETS, 476 + SSD20XD_TTL_OFFSETS, 477 + SSD20XD_GPIO_OFFSETS, 478 + }; 479 + 480 + MSC313_GPIO_CHIPDATA(ssd20xd); 224 481 #endif 225 482 226 483 struct msc313_gpio { ··· 668 411 { 669 412 .compatible = "mstar,msc313-gpio", 670 413 .data = &msc313_data, 414 + }, 415 + { 416 + .compatible = "sstar,ssd20xd-gpio", 417 + .data = &ssd20xd_data, 671 418 }, 672 419 #endif 673 420 { }