/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Anybus-S controller definitions
 *
 * Copyright 2018 Arcx Inc
 */

#ifndef __LINUX_ANYBUSS_CONTROLLER_H__
#define __LINUX_ANYBUSS_CONTROLLER_H__

#include <linux/device.h>
#include <linux/regmap.h>

/*
 * To instantiate an Anybus-S host, a controller should provide the following:
 * - a reset function which resets the attached card;
 * - a regmap which provides access to the attached card's dpram;
 * - the irq of the attached card
 */
/**
 * struct anybuss_ops - Controller resources to instantiate an Anybus-S host
 *
 * @reset:	asserts/deasserts the anybus card's reset line.
 * @regmap:	provides access to the card's dual-port RAM area.
 * @irq:	number of the interrupt connected to the card's interrupt line.
 * @host_idx:	for multi-host controllers, the host index:
 *		0 for the first host on the controller, 1 for the second, etc.
 */
struct anybuss_ops {
	void (*reset)(struct device *dev, bool assert);
	struct regmap *regmap;
	int irq;
	int host_idx;
};

struct anybuss_host;

struct anybuss_host * __must_check
anybuss_host_common_probe(struct device *dev,
			  const struct anybuss_ops *ops);
void anybuss_host_common_remove(struct anybuss_host *host);

struct anybuss_host * __must_check
devm_anybuss_host_common_probe(struct device *dev,
			       const struct anybuss_ops *ops);

#endif /* __LINUX_ANYBUSS_CONTROLLER_H__ */