xref: /kernel/linux/linux-6.6/drivers/nfc/st95hf/spi.h (revision 62306a36)
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