blob: 60c8c1825b7a95e368a3a4ed9ba76f30d9137a17 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <stdbool.h>
#include <stddef.h>
struct spi_dev_ctx;
/**
* struct spi_bus_ctx - context structure for SPI devices
* @owner: pointer to &struct spi_dev_ctx currently active on this bus
* @num_devs: number of SPI devices attached to this bus
*/
struct spi_bus_ctx {
struct spi_dev_ctx* owner;
size_t num_devs;
};
/**
* struct spi_seq_entry - individual entry in a sequence of SPI requests
* @exec: is invoked when SPI sequence is committed
* @priv: command-specific private data
*
* Sequence of SPI requests is represented by an array of &struct spi_seq_entry,
* with each SPI request saved in a &struct spi_seq_entry.
*
* Implementing spi_seq_*() is not required by SPI driver interface and is not
* strictly necessary for this software SPI device. We implement this behavior
* for testing purposes.
*/
struct spi_seq_entry {
void (*exec)(struct spi_dev_ctx* dev, void* priv);
void* priv;
};
/**
* struct spi_dev_ctx - context structure for SPI devices
* @bus: pointer to &struct spi_bus_ctx that this device is attached to
* @cmds: pointer to an array of &struct spi_seq_entry representing a
* sequence of SPI requests
* @num_cmds: number of SPI commands in array pointed to by @cmds
* @curr_cmd: index of SPI command to be filled out
* @loopback: whether this is a loopback device or not
*/
struct spi_dev_ctx {
struct spi_bus_ctx* bus;
struct spi_seq_entry* cmds;
size_t num_cmds;
size_t curr_cmd;
bool loopback;
};