core.c (32972B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * -------------------------------------------------------------------- 4 * Driver for ST NFC Transceiver ST95HF 5 * -------------------------------------------------------------------- 6 * Copyright (C) 2015 STMicroelectronics Pvt. Ltd. All rights reserved. 7 */ 8 9#include <linux/err.h> 10#include <linux/gpio.h> 11#include <linux/init.h> 12#include <linux/interrupt.h> 13#include <linux/irq.h> 14#include <linux/module.h> 15#include <linux/netdevice.h> 16#include <linux/nfc.h> 17#include <linux/of_gpio.h> 18#include <linux/of.h> 19#include <linux/property.h> 20#include <linux/regulator/consumer.h> 21#include <linux/wait.h> 22#include <net/nfc/digital.h> 23#include <net/nfc/nfc.h> 24 25#include "spi.h" 26 27/* supported protocols */ 28#define ST95HF_SUPPORTED_PROT (NFC_PROTO_ISO14443_MASK | \ 29 NFC_PROTO_ISO14443_B_MASK | \ 30 NFC_PROTO_ISO15693_MASK) 31/* driver capabilities */ 32#define ST95HF_CAPABILITIES NFC_DIGITAL_DRV_CAPS_IN_CRC 33 34/* Command Send Interface */ 35/* ST95HF_COMMAND_SEND CMD Ids */ 36#define ECHO_CMD 0x55 37#define WRITE_REGISTER_CMD 0x9 38#define PROTOCOL_SELECT_CMD 0x2 39#define SEND_RECEIVE_CMD 0x4 40 41/* Select protocol codes */ 42#define ISO15693_PROTOCOL_CODE 0x1 43#define ISO14443A_PROTOCOL_CODE 0x2 44#define ISO14443B_PROTOCOL_CODE 0x3 45 46/* 47 * head room len is 3 48 * 1 byte for control byte 49 * 1 byte for cmd 50 * 1 byte for size 51 */ 52#define ST95HF_HEADROOM_LEN 3 53 54/* 55 * tailroom is 1 for ISO14443A 56 * and 0 for ISO14443B/ISO15693, 57 * hence the max value 1 should be 58 * taken. 59 */ 60#define ST95HF_TAILROOM_LEN 1 61 62/* Command Response interface */ 63#define MAX_RESPONSE_BUFFER_SIZE 280 64#define ECHORESPONSE 0x55 65#define ST95HF_ERR_MASK 0xF 66#define ST95HF_TIMEOUT_ERROR 0x87 67#define ST95HF_NFCA_CRC_ERR_MASK 0x20 68#define ST95HF_NFCB_CRC_ERR_MASK 0x01 69 70/* ST95HF transmission flag values */ 71#define TRFLAG_NFCA_SHORT_FRAME 0x07 72#define TRFLAG_NFCA_STD_FRAME 0x08 73#define TRFLAG_NFCA_STD_FRAME_CRC 0x28 74 75/* Misc defs */ 76#define HIGH 1 77#define LOW 0 78#define ISO14443A_RATS_REQ 0xE0 79#define RATS_TB1_PRESENT_MASK 0x20 80#define RATS_TA1_PRESENT_MASK 0x10 81#define TB1_FWI_MASK 0xF0 82#define WTX_REQ_FROM_TAG 0xF2 83 84#define MAX_CMD_LEN 0x7 85 86#define MAX_CMD_PARAMS 4 87struct cmd { 88 int cmd_len; 89 unsigned char cmd_id; 90 unsigned char no_cmd_params; 91 unsigned char cmd_params[MAX_CMD_PARAMS]; 92 enum req_type req; 93}; 94 95struct param_list { 96 int param_offset; 97 int new_param_val; 98}; 99 100/* 101 * List of top-level cmds to be used internally by the driver. 102 * All these commands are build on top of ST95HF basic commands 103 * such as SEND_RECEIVE_CMD, PROTOCOL_SELECT_CMD, etc. 104 * These top level cmds are used internally while implementing various ops of 105 * digital layer/driver probe or extending the digital framework layer for 106 * features that are not yet implemented there, for example, WTX cmd handling. 107 */ 108enum st95hf_cmd_list { 109 CMD_ECHO, 110 CMD_ISO14443A_CONFIG, 111 CMD_ISO14443A_DEMOGAIN, 112 CMD_ISO14443B_DEMOGAIN, 113 CMD_ISO14443A_PROTOCOL_SELECT, 114 CMD_ISO14443B_PROTOCOL_SELECT, 115 CMD_WTX_RESPONSE, 116 CMD_FIELD_OFF, 117 CMD_ISO15693_PROTOCOL_SELECT, 118}; 119 120static const struct cmd cmd_array[] = { 121 [CMD_ECHO] = { 122 .cmd_len = 0x2, 123 .cmd_id = ECHO_CMD, 124 .no_cmd_params = 0, 125 .req = SYNC, 126 }, 127 [CMD_ISO14443A_CONFIG] = { 128 .cmd_len = 0x7, 129 .cmd_id = WRITE_REGISTER_CMD, 130 .no_cmd_params = 0x4, 131 .cmd_params = {0x3A, 0x00, 0x5A, 0x04}, 132 .req = SYNC, 133 }, 134 [CMD_ISO14443A_DEMOGAIN] = { 135 .cmd_len = 0x7, 136 .cmd_id = WRITE_REGISTER_CMD, 137 .no_cmd_params = 0x4, 138 .cmd_params = {0x68, 0x01, 0x01, 0xDF}, 139 .req = SYNC, 140 }, 141 [CMD_ISO14443B_DEMOGAIN] = { 142 .cmd_len = 0x7, 143 .cmd_id = WRITE_REGISTER_CMD, 144 .no_cmd_params = 0x4, 145 .cmd_params = {0x68, 0x01, 0x01, 0x51}, 146 .req = SYNC, 147 }, 148 [CMD_ISO14443A_PROTOCOL_SELECT] = { 149 .cmd_len = 0x7, 150 .cmd_id = PROTOCOL_SELECT_CMD, 151 .no_cmd_params = 0x4, 152 .cmd_params = {ISO14443A_PROTOCOL_CODE, 0x00, 0x01, 0xA0}, 153 .req = SYNC, 154 }, 155 [CMD_ISO14443B_PROTOCOL_SELECT] = { 156 .cmd_len = 0x7, 157 .cmd_id = PROTOCOL_SELECT_CMD, 158 .no_cmd_params = 0x4, 159 .cmd_params = {ISO14443B_PROTOCOL_CODE, 0x01, 0x03, 0xFF}, 160 .req = SYNC, 161 }, 162 [CMD_WTX_RESPONSE] = { 163 .cmd_len = 0x6, 164 .cmd_id = SEND_RECEIVE_CMD, 165 .no_cmd_params = 0x3, 166 .cmd_params = {0xF2, 0x00, TRFLAG_NFCA_STD_FRAME_CRC}, 167 .req = ASYNC, 168 }, 169 [CMD_FIELD_OFF] = { 170 .cmd_len = 0x5, 171 .cmd_id = PROTOCOL_SELECT_CMD, 172 .no_cmd_params = 0x2, 173 .cmd_params = {0x0, 0x0}, 174 .req = SYNC, 175 }, 176 [CMD_ISO15693_PROTOCOL_SELECT] = { 177 .cmd_len = 0x5, 178 .cmd_id = PROTOCOL_SELECT_CMD, 179 .no_cmd_params = 0x2, 180 .cmd_params = {ISO15693_PROTOCOL_CODE, 0x0D}, 181 .req = SYNC, 182 }, 183}; 184 185/* st95_digital_cmd_complete_arg stores client context */ 186struct st95_digital_cmd_complete_arg { 187 struct sk_buff *skb_resp; 188 nfc_digital_cmd_complete_t complete_cb; 189 void *cb_usrarg; 190 bool rats; 191}; 192 193/* 194 * structure containing ST95HF driver specific data. 195 * @spicontext: structure containing information required 196 * for spi communication between st95hf and host. 197 * @ddev: nfc digital device object. 198 * @nfcdev: nfc device object. 199 * @enable_gpio: gpio used to enable st95hf transceiver. 200 * @complete_cb_arg: structure to store various context information 201 * that is passed from nfc requesting thread to the threaded ISR. 202 * @st95hf_supply: regulator "consumer" for NFC device. 203 * @sendrcv_trflag: last byte of frame send by sendrecv command 204 * of st95hf. This byte contains transmission flag info. 205 * @exchange_lock: semaphore used for signaling the st95hf_remove 206 * function that the last outstanding async nfc request is finished. 207 * @rm_lock: mutex for ensuring safe access of nfc digital object 208 * from threaded ISR. Usage of this mutex avoids any race between 209 * deletion of the object from st95hf_remove() and its access from 210 * the threaded ISR. 211 * @nfcdev_free: flag to have the state of nfc device object. 212 * [alive | died] 213 * @current_protocol: current nfc protocol. 214 * @current_rf_tech: current rf technology. 215 * @fwi: frame waiting index, received in reply of RATS according to 216 * digital protocol. 217 */ 218struct st95hf_context { 219 struct st95hf_spi_context spicontext; 220 struct nfc_digital_dev *ddev; 221 struct nfc_dev *nfcdev; 222 unsigned int enable_gpio; 223 struct st95_digital_cmd_complete_arg complete_cb_arg; 224 struct regulator *st95hf_supply; 225 unsigned char sendrcv_trflag; 226 struct semaphore exchange_lock; 227 struct mutex rm_lock; 228 bool nfcdev_free; 229 u8 current_protocol; 230 u8 current_rf_tech; 231 int fwi; 232}; 233 234/* 235 * st95hf_send_recv_cmd() is for sending commands to ST95HF 236 * that are described in the cmd_array[]. It can optionally 237 * receive the response if the cmd request is of type 238 * SYNC. For that to happen caller must pass true to recv_res. 239 * For ASYNC request, recv_res is ignored and the 240 * function will never try to receive the response on behalf 241 * of the caller. 242 */ 243static int st95hf_send_recv_cmd(struct st95hf_context *st95context, 244 enum st95hf_cmd_list cmd, 245 int no_modif, 246 struct param_list *list_array, 247 bool recv_res) 248{ 249 unsigned char spi_cmd_buffer[MAX_CMD_LEN]; 250 int i, ret; 251 struct device *dev = &st95context->spicontext.spidev->dev; 252 253 if (cmd_array[cmd].cmd_len > MAX_CMD_LEN) 254 return -EINVAL; 255 if (cmd_array[cmd].no_cmd_params < no_modif) 256 return -EINVAL; 257 if (no_modif && !list_array) 258 return -EINVAL; 259 260 spi_cmd_buffer[0] = ST95HF_COMMAND_SEND; 261 spi_cmd_buffer[1] = cmd_array[cmd].cmd_id; 262 spi_cmd_buffer[2] = cmd_array[cmd].no_cmd_params; 263 264 memcpy(&spi_cmd_buffer[3], cmd_array[cmd].cmd_params, 265 spi_cmd_buffer[2]); 266 267 for (i = 0; i < no_modif; i++) { 268 if (list_array[i].param_offset >= cmd_array[cmd].no_cmd_params) 269 return -EINVAL; 270 spi_cmd_buffer[3 + list_array[i].param_offset] = 271 list_array[i].new_param_val; 272 } 273 274 ret = st95hf_spi_send(&st95context->spicontext, 275 spi_cmd_buffer, 276 cmd_array[cmd].cmd_len, 277 cmd_array[cmd].req); 278 if (ret) { 279 dev_err(dev, "st95hf_spi_send failed with error %d\n", ret); 280 return ret; 281 } 282 283 if (cmd_array[cmd].req == SYNC && recv_res) { 284 unsigned char st95hf_response_arr[2]; 285 286 ret = st95hf_spi_recv_response(&st95context->spicontext, 287 st95hf_response_arr); 288 if (ret < 0) { 289 dev_err(dev, "spi error from st95hf_spi_recv_response(), err = 0x%x\n", 290 ret); 291 return ret; 292 } 293 294 if (st95hf_response_arr[0]) { 295 dev_err(dev, "st95hf error from st95hf_spi_recv_response(), err = 0x%x\n", 296 st95hf_response_arr[0]); 297 return -EIO; 298 } 299 } 300 301 return 0; 302} 303 304static int st95hf_echo_command(struct st95hf_context *st95context) 305{ 306 int result = 0; 307 unsigned char echo_response; 308 309 result = st95hf_send_recv_cmd(st95context, CMD_ECHO, 0, NULL, false); 310 if (result) 311 return result; 312 313 /* If control reached here, response can be taken */ 314 result = st95hf_spi_recv_echo_res(&st95context->spicontext, 315 &echo_response); 316 if (result) { 317 dev_err(&st95context->spicontext.spidev->dev, 318 "err: echo response receive error = 0x%x\n", result); 319 return result; 320 } 321 322 if (echo_response == ECHORESPONSE) 323 return 0; 324 325 dev_err(&st95context->spicontext.spidev->dev, "err: echo res is 0x%x\n", 326 echo_response); 327 328 return -EIO; 329} 330 331static int secondary_configuration_type4a(struct st95hf_context *stcontext) 332{ 333 int result = 0; 334 struct device *dev = &stcontext->nfcdev->dev; 335 336 /* 14443A config setting after select protocol */ 337 result = st95hf_send_recv_cmd(stcontext, 338 CMD_ISO14443A_CONFIG, 339 0, 340 NULL, 341 true); 342 if (result) { 343 dev_err(dev, "type a config cmd, err = 0x%x\n", result); 344 return result; 345 } 346 347 /* 14443A demo gain setting */ 348 result = st95hf_send_recv_cmd(stcontext, 349 CMD_ISO14443A_DEMOGAIN, 350 0, 351 NULL, 352 true); 353 if (result) 354 dev_err(dev, "type a demogain cmd, err = 0x%x\n", result); 355 356 return result; 357} 358 359static int secondary_configuration_type4b(struct st95hf_context *stcontext) 360{ 361 int result = 0; 362 struct device *dev = &stcontext->nfcdev->dev; 363 364 result = st95hf_send_recv_cmd(stcontext, 365 CMD_ISO14443B_DEMOGAIN, 366 0, 367 NULL, 368 true); 369 if (result) 370 dev_err(dev, "type b demogain cmd, err = 0x%x\n", result); 371 372 return result; 373} 374 375static int st95hf_select_protocol(struct st95hf_context *stcontext, int type) 376{ 377 int result = 0; 378 struct device *dev; 379 380 dev = &stcontext->nfcdev->dev; 381 382 switch (type) { 383 case NFC_DIGITAL_RF_TECH_106A: 384 stcontext->current_rf_tech = NFC_DIGITAL_RF_TECH_106A; 385 result = st95hf_send_recv_cmd(stcontext, 386 CMD_ISO14443A_PROTOCOL_SELECT, 387 0, 388 NULL, 389 true); 390 if (result) { 391 dev_err(dev, "protocol sel, err = 0x%x\n", 392 result); 393 return result; 394 } 395 396 /* secondary config. for 14443Type 4A after protocol select */ 397 result = secondary_configuration_type4a(stcontext); 398 if (result) { 399 dev_err(dev, "type a secondary config, err = 0x%x\n", 400 result); 401 return result; 402 } 403 break; 404 case NFC_DIGITAL_RF_TECH_106B: 405 stcontext->current_rf_tech = NFC_DIGITAL_RF_TECH_106B; 406 result = st95hf_send_recv_cmd(stcontext, 407 CMD_ISO14443B_PROTOCOL_SELECT, 408 0, 409 NULL, 410 true); 411 if (result) { 412 dev_err(dev, "protocol sel send, err = 0x%x\n", 413 result); 414 return result; 415 } 416 417 /* 418 * delay of 5-6 ms is required after select protocol 419 * command in case of ISO14443 Type B 420 */ 421 usleep_range(50000, 60000); 422 423 /* secondary config. for 14443Type 4B after protocol select */ 424 result = secondary_configuration_type4b(stcontext); 425 if (result) { 426 dev_err(dev, "type b secondary config, err = 0x%x\n", 427 result); 428 return result; 429 } 430 break; 431 case NFC_DIGITAL_RF_TECH_ISO15693: 432 stcontext->current_rf_tech = NFC_DIGITAL_RF_TECH_ISO15693; 433 result = st95hf_send_recv_cmd(stcontext, 434 CMD_ISO15693_PROTOCOL_SELECT, 435 0, 436 NULL, 437 true); 438 if (result) { 439 dev_err(dev, "protocol sel send, err = 0x%x\n", 440 result); 441 return result; 442 } 443 break; 444 default: 445 return -EINVAL; 446 } 447 448 return 0; 449} 450 451static void st95hf_send_st95enable_negativepulse(struct st95hf_context *st95con) 452{ 453 /* First make irq_in pin high */ 454 gpio_set_value(st95con->enable_gpio, HIGH); 455 456 /* wait for 1 milisecond */ 457 usleep_range(1000, 2000); 458 459 /* Make irq_in pin low */ 460 gpio_set_value(st95con->enable_gpio, LOW); 461 462 /* wait for minimum interrupt pulse to make st95 active */ 463 usleep_range(1000, 2000); 464 465 /* At end make it high */ 466 gpio_set_value(st95con->enable_gpio, HIGH); 467} 468 469/* 470 * Send a reset sequence over SPI bus (Reset command + wait 3ms + 471 * negative pulse on st95hf enable gpio 472 */ 473static int st95hf_send_spi_reset_sequence(struct st95hf_context *st95context) 474{ 475 int result = 0; 476 unsigned char reset_cmd = ST95HF_COMMAND_RESET; 477 478 result = st95hf_spi_send(&st95context->spicontext, 479 &reset_cmd, 480 ST95HF_RESET_CMD_LEN, 481 ASYNC); 482 if (result) { 483 dev_err(&st95context->spicontext.spidev->dev, 484 "spi reset sequence cmd error = %d", result); 485 return result; 486 } 487 488 /* wait for 3 milisecond to complete the controller reset process */ 489 usleep_range(3000, 4000); 490 491 /* send negative pulse to make st95hf active */ 492 st95hf_send_st95enable_negativepulse(st95context); 493 494 /* wait for 10 milisecond : HFO setup time */ 495 usleep_range(10000, 20000); 496 497 return result; 498} 499 500static int st95hf_por_sequence(struct st95hf_context *st95context) 501{ 502 int nth_attempt = 1; 503 int result; 504 505 st95hf_send_st95enable_negativepulse(st95context); 506 507 usleep_range(5000, 6000); 508 do { 509 /* send an ECHO command and checks ST95HF response */ 510 result = st95hf_echo_command(st95context); 511 512 dev_dbg(&st95context->spicontext.spidev->dev, 513 "response from echo function = 0x%x, attempt = %d\n", 514 result, nth_attempt); 515 516 if (!result) 517 return 0; 518 519 /* send an pulse on IRQ in case of the chip is on sleep state */ 520 if (nth_attempt == 2) 521 st95hf_send_st95enable_negativepulse(st95context); 522 else 523 st95hf_send_spi_reset_sequence(st95context); 524 525 /* delay of 50 milisecond */ 526 usleep_range(50000, 51000); 527 } while (nth_attempt++ < 3); 528 529 return -ETIMEDOUT; 530} 531 532static int iso14443_config_fdt(struct st95hf_context *st95context, int wtxm) 533{ 534 int result = 0; 535 struct device *dev = &st95context->spicontext.spidev->dev; 536 struct nfc_digital_dev *nfcddev = st95context->ddev; 537 unsigned char pp_typeb; 538 struct param_list new_params[2]; 539 540 pp_typeb = cmd_array[CMD_ISO14443B_PROTOCOL_SELECT].cmd_params[2]; 541 542 if (nfcddev->curr_protocol == NFC_PROTO_ISO14443 && 543 st95context->fwi < 4) 544 st95context->fwi = 4; 545 546 new_params[0].param_offset = 2; 547 if (nfcddev->curr_protocol == NFC_PROTO_ISO14443) 548 new_params[0].new_param_val = st95context->fwi; 549 else if (nfcddev->curr_protocol == NFC_PROTO_ISO14443_B) 550 new_params[0].new_param_val = pp_typeb; 551 552 new_params[1].param_offset = 3; 553 new_params[1].new_param_val = wtxm; 554 555 switch (nfcddev->curr_protocol) { 556 case NFC_PROTO_ISO14443: 557 result = st95hf_send_recv_cmd(st95context, 558 CMD_ISO14443A_PROTOCOL_SELECT, 559 2, 560 new_params, 561 true); 562 if (result) { 563 dev_err(dev, "WTX type a sel proto, err = 0x%x\n", 564 result); 565 return result; 566 } 567 568 /* secondary config. for 14443Type 4A after protocol select */ 569 result = secondary_configuration_type4a(st95context); 570 if (result) { 571 dev_err(dev, "WTX type a second. config, err = 0x%x\n", 572 result); 573 return result; 574 } 575 break; 576 case NFC_PROTO_ISO14443_B: 577 result = st95hf_send_recv_cmd(st95context, 578 CMD_ISO14443B_PROTOCOL_SELECT, 579 2, 580 new_params, 581 true); 582 if (result) { 583 dev_err(dev, "WTX type b sel proto, err = 0x%x\n", 584 result); 585 return result; 586 } 587 588 /* secondary config. for 14443Type 4B after protocol select */ 589 result = secondary_configuration_type4b(st95context); 590 if (result) { 591 dev_err(dev, "WTX type b second. config, err = 0x%x\n", 592 result); 593 return result; 594 } 595 break; 596 default: 597 return -EINVAL; 598 } 599 600 return 0; 601} 602 603static int st95hf_handle_wtx(struct st95hf_context *stcontext, 604 bool new_wtx, 605 int wtx_val) 606{ 607 int result = 0; 608 unsigned char val_mm = 0; 609 struct param_list new_params[1]; 610 struct nfc_digital_dev *nfcddev = stcontext->ddev; 611 struct device *dev = &stcontext->nfcdev->dev; 612 613 if (new_wtx) { 614 result = iso14443_config_fdt(stcontext, wtx_val & 0x3f); 615 if (result) { 616 dev_err(dev, "Config. setting error on WTX req, err = 0x%x\n", 617 result); 618 return result; 619 } 620 621 /* Send response of wtx with ASYNC as no response expected */ 622 new_params[0].param_offset = 1; 623 new_params[0].new_param_val = wtx_val; 624 625 result = st95hf_send_recv_cmd(stcontext, 626 CMD_WTX_RESPONSE, 627 1, 628 new_params, 629 false); 630 if (result) 631 dev_err(dev, "WTX response send, err = 0x%x\n", result); 632 return result; 633 } 634 635 /* if no new wtx, cofigure with default values */ 636 if (nfcddev->curr_protocol == NFC_PROTO_ISO14443) 637 val_mm = cmd_array[CMD_ISO14443A_PROTOCOL_SELECT].cmd_params[3]; 638 else if (nfcddev->curr_protocol == NFC_PROTO_ISO14443_B) 639 val_mm = cmd_array[CMD_ISO14443B_PROTOCOL_SELECT].cmd_params[3]; 640 641 result = iso14443_config_fdt(stcontext, val_mm); 642 if (result) 643 dev_err(dev, "Default config. setting error after WTX processing, err = 0x%x\n", 644 result); 645 646 return result; 647} 648 649static int st95hf_error_handling(struct st95hf_context *stcontext, 650 struct sk_buff *skb_resp, 651 int res_len) 652{ 653 int result = 0; 654 unsigned char error_byte; 655 struct device *dev = &stcontext->nfcdev->dev; 656 657 /* First check ST95HF specific error */ 658 if (skb_resp->data[0] & ST95HF_ERR_MASK) { 659 if (skb_resp->data[0] == ST95HF_TIMEOUT_ERROR) 660 result = -ETIMEDOUT; 661 else 662 result = -EIO; 663 return result; 664 } 665 666 /* Check for CRC err only if CRC is present in the tag response */ 667 switch (stcontext->current_rf_tech) { 668 case NFC_DIGITAL_RF_TECH_106A: 669 if (stcontext->sendrcv_trflag == TRFLAG_NFCA_STD_FRAME_CRC) { 670 error_byte = skb_resp->data[res_len - 3]; 671 if (error_byte & ST95HF_NFCA_CRC_ERR_MASK) { 672 /* CRC error occurred */ 673 dev_err(dev, "CRC error, byte received = 0x%x\n", 674 error_byte); 675 result = -EIO; 676 } 677 } 678 break; 679 case NFC_DIGITAL_RF_TECH_106B: 680 case NFC_DIGITAL_RF_TECH_ISO15693: 681 error_byte = skb_resp->data[res_len - 1]; 682 if (error_byte & ST95HF_NFCB_CRC_ERR_MASK) { 683 /* CRC error occurred */ 684 dev_err(dev, "CRC error, byte received = 0x%x\n", 685 error_byte); 686 result = -EIO; 687 } 688 break; 689 } 690 691 return result; 692} 693 694static int st95hf_response_handler(struct st95hf_context *stcontext, 695 struct sk_buff *skb_resp, 696 int res_len) 697{ 698 int result = 0; 699 int skb_len; 700 unsigned char val_mm; 701 struct nfc_digital_dev *nfcddev = stcontext->ddev; 702 struct device *dev = &stcontext->nfcdev->dev; 703 struct st95_digital_cmd_complete_arg *cb_arg; 704 705 cb_arg = &stcontext->complete_cb_arg; 706 707 /* Process the response */ 708 skb_put(skb_resp, res_len); 709 710 /* Remove st95 header */ 711 skb_pull(skb_resp, 2); 712 713 skb_len = skb_resp->len; 714 715 /* check if it is case of RATS request reply & FWI is present */ 716 if (nfcddev->curr_protocol == NFC_PROTO_ISO14443 && cb_arg->rats && 717 (skb_resp->data[1] & RATS_TB1_PRESENT_MASK)) { 718 if (skb_resp->data[1] & RATS_TA1_PRESENT_MASK) 719 stcontext->fwi = 720 (skb_resp->data[3] & TB1_FWI_MASK) >> 4; 721 else 722 stcontext->fwi = 723 (skb_resp->data[2] & TB1_FWI_MASK) >> 4; 724 725 val_mm = cmd_array[CMD_ISO14443A_PROTOCOL_SELECT].cmd_params[3]; 726 727 result = iso14443_config_fdt(stcontext, val_mm); 728 if (result) { 729 dev_err(dev, "error in config_fdt to handle fwi of ATS, error=%d\n", 730 result); 731 return result; 732 } 733 } 734 cb_arg->rats = false; 735 736 /* Remove CRC bytes only if received frames data has an eod (CRC) */ 737 switch (stcontext->current_rf_tech) { 738 case NFC_DIGITAL_RF_TECH_106A: 739 if (stcontext->sendrcv_trflag == TRFLAG_NFCA_STD_FRAME_CRC) 740 skb_trim(skb_resp, (skb_len - 5)); 741 else 742 skb_trim(skb_resp, (skb_len - 3)); 743 break; 744 case NFC_DIGITAL_RF_TECH_106B: 745 case NFC_DIGITAL_RF_TECH_ISO15693: 746 skb_trim(skb_resp, (skb_len - 3)); 747 break; 748 } 749 750 return result; 751} 752 753static irqreturn_t st95hf_irq_handler(int irq, void *st95hfcontext) 754{ 755 struct st95hf_context *stcontext = 756 (struct st95hf_context *)st95hfcontext; 757 758 if (stcontext->spicontext.req_issync) { 759 complete(&stcontext->spicontext.done); 760 stcontext->spicontext.req_issync = false; 761 return IRQ_HANDLED; 762 } 763 764 return IRQ_WAKE_THREAD; 765} 766 767static irqreturn_t st95hf_irq_thread_handler(int irq, void *st95hfcontext) 768{ 769 int result = 0; 770 int res_len; 771 static bool wtx; 772 struct device *spidevice; 773 struct sk_buff *skb_resp; 774 struct st95hf_context *stcontext = 775 (struct st95hf_context *)st95hfcontext; 776 struct st95_digital_cmd_complete_arg *cb_arg; 777 778 spidevice = &stcontext->spicontext.spidev->dev; 779 780 /* 781 * check semaphore, if not down() already, then we don't 782 * know in which context the ISR is called and surely it 783 * will be a bug. Note that down() of the semaphore is done 784 * in the corresponding st95hf_in_send_cmd() and then 785 * only this ISR should be called. ISR will up() the 786 * semaphore before leaving. Hence when the ISR is called 787 * the correct behaviour is down_trylock() should always 788 * return 1 (indicating semaphore cant be taken and hence no 789 * change in semaphore count). 790 * If not, then we up() the semaphore and crash on 791 * a BUG() ! 792 */ 793 if (!down_trylock(&stcontext->exchange_lock)) { 794 up(&stcontext->exchange_lock); 795 WARN(1, "unknown context in ST95HF ISR"); 796 return IRQ_NONE; 797 } 798 799 cb_arg = &stcontext->complete_cb_arg; 800 skb_resp = cb_arg->skb_resp; 801 802 mutex_lock(&stcontext->rm_lock); 803 res_len = st95hf_spi_recv_response(&stcontext->spicontext, 804 skb_resp->data); 805 if (res_len < 0) { 806 dev_err(spidevice, "TISR spi response err = 0x%x\n", res_len); 807 result = res_len; 808 goto end; 809 } 810 811 /* if stcontext->nfcdev_free is true, it means remove already ran */ 812 if (stcontext->nfcdev_free) { 813 result = -ENODEV; 814 goto end; 815 } 816 817 if (skb_resp->data[2] == WTX_REQ_FROM_TAG) { 818 /* Request for new FWT from tag */ 819 result = st95hf_handle_wtx(stcontext, true, skb_resp->data[3]); 820 if (result) 821 goto end; 822 823 wtx = true; 824 mutex_unlock(&stcontext->rm_lock); 825 return IRQ_HANDLED; 826 } 827 828 result = st95hf_error_handling(stcontext, skb_resp, res_len); 829 if (result) 830 goto end; 831 832 result = st95hf_response_handler(stcontext, skb_resp, res_len); 833 if (result) 834 goto end; 835 836 /* 837 * If select protocol is done on wtx req. do select protocol 838 * again with default values 839 */ 840 if (wtx) { 841 wtx = false; 842 result = st95hf_handle_wtx(stcontext, false, 0); 843 if (result) 844 goto end; 845 } 846 847 /* call digital layer callback */ 848 cb_arg->complete_cb(stcontext->ddev, cb_arg->cb_usrarg, skb_resp); 849 850 /* up the semaphore before returning */ 851 up(&stcontext->exchange_lock); 852 mutex_unlock(&stcontext->rm_lock); 853 854 return IRQ_HANDLED; 855 856end: 857 kfree_skb(skb_resp); 858 wtx = false; 859 cb_arg->rats = false; 860 skb_resp = ERR_PTR(result); 861 /* call of callback with error */ 862 cb_arg->complete_cb(stcontext->ddev, cb_arg->cb_usrarg, skb_resp); 863 /* up the semaphore before returning */ 864 up(&stcontext->exchange_lock); 865 mutex_unlock(&stcontext->rm_lock); 866 return IRQ_HANDLED; 867} 868 869/* NFC ops functions definition */ 870static int st95hf_in_configure_hw(struct nfc_digital_dev *ddev, 871 int type, 872 int param) 873{ 874 struct st95hf_context *stcontext = nfc_digital_get_drvdata(ddev); 875 876 if (type == NFC_DIGITAL_CONFIG_RF_TECH) 877 return st95hf_select_protocol(stcontext, param); 878 879 if (type == NFC_DIGITAL_CONFIG_FRAMING) { 880 switch (param) { 881 case NFC_DIGITAL_FRAMING_NFCA_SHORT: 882 stcontext->sendrcv_trflag = TRFLAG_NFCA_SHORT_FRAME; 883 break; 884 case NFC_DIGITAL_FRAMING_NFCA_STANDARD: 885 stcontext->sendrcv_trflag = TRFLAG_NFCA_STD_FRAME; 886 break; 887 case NFC_DIGITAL_FRAMING_NFCA_T4T: 888 case NFC_DIGITAL_FRAMING_NFCA_NFC_DEP: 889 case NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A: 890 stcontext->sendrcv_trflag = TRFLAG_NFCA_STD_FRAME_CRC; 891 break; 892 case NFC_DIGITAL_FRAMING_NFCB: 893 case NFC_DIGITAL_FRAMING_ISO15693_INVENTORY: 894 case NFC_DIGITAL_FRAMING_ISO15693_T5T: 895 break; 896 } 897 } 898 899 return 0; 900} 901 902static int rf_off(struct st95hf_context *stcontext) 903{ 904 int rc; 905 struct device *dev; 906 907 dev = &stcontext->nfcdev->dev; 908 909 rc = st95hf_send_recv_cmd(stcontext, CMD_FIELD_OFF, 0, NULL, true); 910 if (rc) 911 dev_err(dev, "protocol sel send field off, err = 0x%x\n", rc); 912 913 return rc; 914} 915 916static int st95hf_in_send_cmd(struct nfc_digital_dev *ddev, 917 struct sk_buff *skb, 918 u16 timeout, 919 nfc_digital_cmd_complete_t cb, 920 void *arg) 921{ 922 struct st95hf_context *stcontext = nfc_digital_get_drvdata(ddev); 923 int rc; 924 struct sk_buff *skb_resp; 925 int len_data_to_tag = 0; 926 927 skb_resp = nfc_alloc_recv_skb(MAX_RESPONSE_BUFFER_SIZE, GFP_KERNEL); 928 if (!skb_resp) 929 return -ENOMEM; 930 931 switch (stcontext->current_rf_tech) { 932 case NFC_DIGITAL_RF_TECH_106A: 933 len_data_to_tag = skb->len + 1; 934 skb_put_u8(skb, stcontext->sendrcv_trflag); 935 break; 936 case NFC_DIGITAL_RF_TECH_106B: 937 case NFC_DIGITAL_RF_TECH_ISO15693: 938 len_data_to_tag = skb->len; 939 break; 940 default: 941 rc = -EINVAL; 942 goto free_skb_resp; 943 } 944 945 skb_push(skb, 3); 946 skb->data[0] = ST95HF_COMMAND_SEND; 947 skb->data[1] = SEND_RECEIVE_CMD; 948 skb->data[2] = len_data_to_tag; 949 950 stcontext->complete_cb_arg.skb_resp = skb_resp; 951 stcontext->complete_cb_arg.cb_usrarg = arg; 952 stcontext->complete_cb_arg.complete_cb = cb; 953 954 if ((skb->data[3] == ISO14443A_RATS_REQ) && 955 ddev->curr_protocol == NFC_PROTO_ISO14443) 956 stcontext->complete_cb_arg.rats = true; 957 958 /* 959 * down the semaphore to indicate to remove func that an 960 * ISR is pending, note that it will not block here in any case. 961 * If found blocked, it is a BUG! 962 */ 963 rc = down_killable(&stcontext->exchange_lock); 964 if (rc) { 965 WARN(1, "Semaphore is not found up in st95hf_in_send_cmd\n"); 966 goto free_skb_resp; 967 } 968 969 rc = st95hf_spi_send(&stcontext->spicontext, skb->data, 970 skb->len, 971 ASYNC); 972 if (rc) { 973 dev_err(&stcontext->nfcdev->dev, 974 "Error %d trying to perform data_exchange", rc); 975 /* up the semaphore since ISR will never come in this case */ 976 up(&stcontext->exchange_lock); 977 goto free_skb_resp; 978 } 979 980 kfree_skb(skb); 981 982 return rc; 983 984free_skb_resp: 985 kfree_skb(skb_resp); 986 return rc; 987} 988 989/* p2p will be supported in a later release ! */ 990static int st95hf_tg_configure_hw(struct nfc_digital_dev *ddev, 991 int type, 992 int param) 993{ 994 return 0; 995} 996 997static int st95hf_tg_send_cmd(struct nfc_digital_dev *ddev, 998 struct sk_buff *skb, 999 u16 timeout, 1000 nfc_digital_cmd_complete_t cb, 1001 void *arg) 1002{ 1003 return 0; 1004} 1005 1006static int st95hf_tg_listen(struct nfc_digital_dev *ddev, 1007 u16 timeout, 1008 nfc_digital_cmd_complete_t cb, 1009 void *arg) 1010{ 1011 return 0; 1012} 1013 1014static int st95hf_tg_get_rf_tech(struct nfc_digital_dev *ddev, u8 *rf_tech) 1015{ 1016 return 0; 1017} 1018 1019static int st95hf_switch_rf(struct nfc_digital_dev *ddev, bool on) 1020{ 1021 u8 rf_tech; 1022 struct st95hf_context *stcontext = nfc_digital_get_drvdata(ddev); 1023 1024 rf_tech = ddev->curr_rf_tech; 1025 1026 if (on) 1027 /* switch on RF field */ 1028 return st95hf_select_protocol(stcontext, rf_tech); 1029 1030 /* switch OFF RF field */ 1031 return rf_off(stcontext); 1032} 1033 1034/* TODO st95hf_abort_cmd */ 1035static void st95hf_abort_cmd(struct nfc_digital_dev *ddev) 1036{ 1037} 1038 1039static const struct nfc_digital_ops st95hf_nfc_digital_ops = { 1040 .in_configure_hw = st95hf_in_configure_hw, 1041 .in_send_cmd = st95hf_in_send_cmd, 1042 1043 .tg_listen = st95hf_tg_listen, 1044 .tg_configure_hw = st95hf_tg_configure_hw, 1045 .tg_send_cmd = st95hf_tg_send_cmd, 1046 .tg_get_rf_tech = st95hf_tg_get_rf_tech, 1047 1048 .switch_rf = st95hf_switch_rf, 1049 .abort_cmd = st95hf_abort_cmd, 1050}; 1051 1052static const struct spi_device_id st95hf_id[] = { 1053 { "st95hf", 0 }, 1054 {} 1055}; 1056MODULE_DEVICE_TABLE(spi, st95hf_id); 1057 1058static const struct of_device_id st95hf_spi_of_match[] __maybe_unused = { 1059 { .compatible = "st,st95hf" }, 1060 {}, 1061}; 1062MODULE_DEVICE_TABLE(of, st95hf_spi_of_match); 1063 1064static int st95hf_probe(struct spi_device *nfc_spi_dev) 1065{ 1066 int ret; 1067 1068 struct st95hf_context *st95context; 1069 struct st95hf_spi_context *spicontext; 1070 1071 nfc_info(&nfc_spi_dev->dev, "ST95HF driver probe called.\n"); 1072 1073 st95context = devm_kzalloc(&nfc_spi_dev->dev, 1074 sizeof(struct st95hf_context), 1075 GFP_KERNEL); 1076 if (!st95context) 1077 return -ENOMEM; 1078 1079 spicontext = &st95context->spicontext; 1080 1081 spicontext->spidev = nfc_spi_dev; 1082 1083 st95context->fwi = 1084 cmd_array[CMD_ISO14443A_PROTOCOL_SELECT].cmd_params[2]; 1085 1086 if (device_property_present(&nfc_spi_dev->dev, "st95hfvin")) { 1087 st95context->st95hf_supply = 1088 devm_regulator_get(&nfc_spi_dev->dev, 1089 "st95hfvin"); 1090 if (IS_ERR(st95context->st95hf_supply)) { 1091 dev_err(&nfc_spi_dev->dev, "failed to acquire regulator\n"); 1092 return PTR_ERR(st95context->st95hf_supply); 1093 } 1094 1095 ret = regulator_enable(st95context->st95hf_supply); 1096 if (ret) { 1097 dev_err(&nfc_spi_dev->dev, "failed to enable regulator\n"); 1098 return ret; 1099 } 1100 } 1101 1102 init_completion(&spicontext->done); 1103 mutex_init(&spicontext->spi_lock); 1104 1105 /* 1106 * Store spicontext in spi device object for using it in 1107 * remove function 1108 */ 1109 dev_set_drvdata(&nfc_spi_dev->dev, spicontext); 1110 1111 st95context->enable_gpio = 1112 of_get_named_gpio(nfc_spi_dev->dev.of_node, 1113 "enable-gpio", 1114 0); 1115 if (!gpio_is_valid(st95context->enable_gpio)) { 1116 dev_err(&nfc_spi_dev->dev, "No valid enable gpio\n"); 1117 ret = st95context->enable_gpio; 1118 goto err_disable_regulator; 1119 } 1120 1121 ret = devm_gpio_request_one(&nfc_spi_dev->dev, st95context->enable_gpio, 1122 GPIOF_DIR_OUT | GPIOF_INIT_HIGH, 1123 "enable_gpio"); 1124 if (ret) 1125 goto err_disable_regulator; 1126 1127 if (nfc_spi_dev->irq > 0) { 1128 if (devm_request_threaded_irq(&nfc_spi_dev->dev, 1129 nfc_spi_dev->irq, 1130 st95hf_irq_handler, 1131 st95hf_irq_thread_handler, 1132 IRQF_TRIGGER_FALLING, 1133 "st95hf", 1134 (void *)st95context) < 0) { 1135 dev_err(&nfc_spi_dev->dev, "err: irq request for st95hf is failed\n"); 1136 ret = -EINVAL; 1137 goto err_disable_regulator; 1138 } 1139 } else { 1140 dev_err(&nfc_spi_dev->dev, "not a valid IRQ associated with ST95HF\n"); 1141 ret = -EINVAL; 1142 goto err_disable_regulator; 1143 } 1144 1145 /* 1146 * First reset SPI to handle warm reset of the system. 1147 * It will put the ST95HF device in Power ON state 1148 * which make the state of device identical to state 1149 * at the time of cold reset of the system. 1150 */ 1151 ret = st95hf_send_spi_reset_sequence(st95context); 1152 if (ret) { 1153 dev_err(&nfc_spi_dev->dev, "err: spi_reset_sequence failed\n"); 1154 goto err_disable_regulator; 1155 } 1156 1157 /* call PowerOnReset sequence of ST95hf to activate it */ 1158 ret = st95hf_por_sequence(st95context); 1159 if (ret) { 1160 dev_err(&nfc_spi_dev->dev, "err: por seq failed for st95hf\n"); 1161 goto err_disable_regulator; 1162 } 1163 1164 /* create NFC dev object and register with NFC Subsystem */ 1165 st95context->ddev = nfc_digital_allocate_device(&st95hf_nfc_digital_ops, 1166 ST95HF_SUPPORTED_PROT, 1167 ST95HF_CAPABILITIES, 1168 ST95HF_HEADROOM_LEN, 1169 ST95HF_TAILROOM_LEN); 1170 if (!st95context->ddev) { 1171 ret = -ENOMEM; 1172 goto err_disable_regulator; 1173 } 1174 1175 st95context->nfcdev = st95context->ddev->nfc_dev; 1176 nfc_digital_set_parent_dev(st95context->ddev, &nfc_spi_dev->dev); 1177 1178 ret = nfc_digital_register_device(st95context->ddev); 1179 if (ret) { 1180 dev_err(&st95context->nfcdev->dev, "st95hf registration failed\n"); 1181 goto err_free_digital_device; 1182 } 1183 1184 /* store st95context in nfc device object */ 1185 nfc_digital_set_drvdata(st95context->ddev, st95context); 1186 1187 sema_init(&st95context->exchange_lock, 1); 1188 mutex_init(&st95context->rm_lock); 1189 1190 return ret; 1191 1192err_free_digital_device: 1193 nfc_digital_free_device(st95context->ddev); 1194err_disable_regulator: 1195 if (st95context->st95hf_supply) 1196 regulator_disable(st95context->st95hf_supply); 1197 1198 return ret; 1199} 1200 1201static void st95hf_remove(struct spi_device *nfc_spi_dev) 1202{ 1203 int result = 0; 1204 unsigned char reset_cmd = ST95HF_COMMAND_RESET; 1205 struct st95hf_spi_context *spictx = dev_get_drvdata(&nfc_spi_dev->dev); 1206 1207 struct st95hf_context *stcontext = container_of(spictx, 1208 struct st95hf_context, 1209 spicontext); 1210 1211 mutex_lock(&stcontext->rm_lock); 1212 1213 nfc_digital_unregister_device(stcontext->ddev); 1214 nfc_digital_free_device(stcontext->ddev); 1215 stcontext->nfcdev_free = true; 1216 1217 mutex_unlock(&stcontext->rm_lock); 1218 1219 /* if last in_send_cmd's ISR is pending, wait for it to finish */ 1220 result = down_killable(&stcontext->exchange_lock); 1221 if (result == -EINTR) 1222 dev_err(&spictx->spidev->dev, "sleep for semaphore interrupted by signal\n"); 1223 1224 /* next reset the ST95HF controller */ 1225 result = st95hf_spi_send(&stcontext->spicontext, 1226 &reset_cmd, 1227 ST95HF_RESET_CMD_LEN, 1228 ASYNC); 1229 if (result) 1230 dev_err(&spictx->spidev->dev, 1231 "ST95HF reset failed in remove() err = %d\n", result); 1232 1233 /* wait for 3 ms to complete the controller reset process */ 1234 usleep_range(3000, 4000); 1235 1236 /* disable regulator */ 1237 if (stcontext->st95hf_supply) 1238 regulator_disable(stcontext->st95hf_supply); 1239} 1240 1241/* Register as SPI protocol driver */ 1242static struct spi_driver st95hf_driver = { 1243 .driver = { 1244 .name = "st95hf", 1245 .owner = THIS_MODULE, 1246 .of_match_table = of_match_ptr(st95hf_spi_of_match), 1247 }, 1248 .id_table = st95hf_id, 1249 .probe = st95hf_probe, 1250 .remove = st95hf_remove, 1251}; 1252 1253module_spi_driver(st95hf_driver); 1254 1255MODULE_AUTHOR("Shikha Singh <shikha.singh@st.com>"); 1256MODULE_DESCRIPTION("ST NFC Transceiver ST95HF driver"); 1257MODULE_LICENSE("GPL v2");