162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * --------------------------------------------------------------------------- 462306a36Sopenharmony_ci * drivers/nfc/st95hf/spi.h functions declarations for SPI communication 562306a36Sopenharmony_ci * --------------------------------------------------------------------------- 662306a36Sopenharmony_ci * Copyright (C) 2015 STMicroelectronics – All Rights Reserved 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef __LINUX_ST95HF_SPI_H 1062306a36Sopenharmony_ci#define __LINUX_ST95HF_SPI_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/spi/spi.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* Basic ST95HF SPI CMDs */ 1562306a36Sopenharmony_ci#define ST95HF_COMMAND_SEND 0x0 1662306a36Sopenharmony_ci#define ST95HF_COMMAND_RESET 0x1 1762306a36Sopenharmony_ci#define ST95HF_COMMAND_RECEIVE 0x2 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define ST95HF_RESET_CMD_LEN 0x1 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* 2262306a36Sopenharmony_ci * structure to contain st95hf spi communication specific information. 2362306a36Sopenharmony_ci * @req_issync: true for synchronous calls. 2462306a36Sopenharmony_ci * @spidev: st95hf spi device object. 2562306a36Sopenharmony_ci * @done: completion structure to wait for st95hf response 2662306a36Sopenharmony_ci * for synchronous calls. 2762306a36Sopenharmony_ci * @spi_lock: mutex to allow only one spi transfer at a time. 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_cistruct st95hf_spi_context { 3062306a36Sopenharmony_ci bool req_issync; 3162306a36Sopenharmony_ci struct spi_device *spidev; 3262306a36Sopenharmony_ci struct completion done; 3362306a36Sopenharmony_ci struct mutex spi_lock; 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* flag to differentiate synchronous & asynchronous spi request */ 3762306a36Sopenharmony_cienum req_type { 3862306a36Sopenharmony_ci SYNC, 3962306a36Sopenharmony_ci ASYNC, 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciint st95hf_spi_send(struct st95hf_spi_context *spicontext, 4362306a36Sopenharmony_ci unsigned char *buffertx, 4462306a36Sopenharmony_ci int datalen, 4562306a36Sopenharmony_ci enum req_type reqtype); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciint st95hf_spi_recv_response(struct st95hf_spi_context *spicontext, 4862306a36Sopenharmony_ci unsigned char *receivebuff); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciint st95hf_spi_recv_echo_res(struct st95hf_spi_context *spicontext, 5162306a36Sopenharmony_ci unsigned char *receivebuff); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#endif 54