1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Anybus-S controller definitions
4 *
5 * Copyright 2018 Arcx Inc
6 */
7
8#ifndef __LINUX_ANYBUSS_CONTROLLER_H__
9#define __LINUX_ANYBUSS_CONTROLLER_H__
10
11#include <linux/device.h>
12#include <linux/regmap.h>
13
14/*
15 * To instantiate an Anybus-S host, a controller should provide the following:
16 * - a reset function which resets the attached card;
17 * - a regmap which provides access to the attached card's dpram;
18 * - the irq of the attached card
19 */
20/**
21 * struct anybuss_ops - Controller resources to instantiate an Anybus-S host
22 *
23 * @reset:	asserts/deasserts the anybus card's reset line.
24 * @regmap:	provides access to the card's dual-port RAM area.
25 * @irq:	number of the interrupt connected to the card's interrupt line.
26 * @host_idx:	for multi-host controllers, the host index:
27 *		0 for the first host on the controller, 1 for the second, etc.
28 */
29struct anybuss_ops {
30	void (*reset)(struct device *dev, bool assert);
31	struct regmap *regmap;
32	int irq;
33	int host_idx;
34};
35
36struct anybuss_host;
37
38struct anybuss_host * __must_check
39anybuss_host_common_probe(struct device *dev,
40			  const struct anybuss_ops *ops);
41void anybuss_host_common_remove(struct anybuss_host *host);
42
43struct anybuss_host * __must_check
44devm_anybuss_host_common_probe(struct device *dev,
45			       const struct anybuss_ops *ops);
46
47#endif /* __LINUX_ANYBUSS_CONTROLLER_H__ */
48