mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 01:41:39 +00:00
32dcd07242
The driver core ignores the return value of struct bus_type::remove() because there is only little that can be done. To simplify the quest to make this function return void, let struct anybuss_client_driver::remove() return void, too. All users already unconditionally return 0, this commit makes it obvious that returning an error code is a bad idea. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Link: https://lore.kernel.org/r/20210505202923.198607-1-u.kleine-koenig@pengutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
99 lines
2.6 KiB
C
99 lines
2.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Anybus-S client adapter definitions
|
|
*
|
|
* Copyright 2018 Arcx Inc
|
|
*/
|
|
|
|
#ifndef __LINUX_ANYBUSS_CLIENT_H__
|
|
#define __LINUX_ANYBUSS_CLIENT_H__
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/types.h>
|
|
#include <linux/poll.h>
|
|
|
|
/* move to <linux/fieldbus_dev.h> when taking this out of staging */
|
|
#include "../fieldbus_dev.h"
|
|
|
|
struct anybuss_host;
|
|
|
|
struct anybuss_client {
|
|
struct device dev;
|
|
struct anybuss_host *host;
|
|
__be16 anybus_id;
|
|
/*
|
|
* these can be optionally set by the client to receive event
|
|
* notifications from the host.
|
|
*/
|
|
void (*on_area_updated)(struct anybuss_client *client);
|
|
void (*on_online_changed)(struct anybuss_client *client, bool online);
|
|
};
|
|
|
|
struct anybuss_client_driver {
|
|
struct device_driver driver;
|
|
int (*probe)(struct anybuss_client *adev);
|
|
void (*remove)(struct anybuss_client *adev);
|
|
u16 anybus_id;
|
|
};
|
|
|
|
int anybuss_client_driver_register(struct anybuss_client_driver *drv);
|
|
void anybuss_client_driver_unregister(struct anybuss_client_driver *drv);
|
|
|
|
static inline struct anybuss_client *to_anybuss_client(struct device *dev)
|
|
{
|
|
return container_of(dev, struct anybuss_client, dev);
|
|
}
|
|
|
|
static inline struct anybuss_client_driver *
|
|
to_anybuss_client_driver(struct device_driver *drv)
|
|
{
|
|
return container_of(drv, struct anybuss_client_driver, driver);
|
|
}
|
|
|
|
static inline void *
|
|
anybuss_get_drvdata(const struct anybuss_client *client)
|
|
{
|
|
return dev_get_drvdata(&client->dev);
|
|
}
|
|
|
|
static inline void
|
|
anybuss_set_drvdata(struct anybuss_client *client, void *data)
|
|
{
|
|
dev_set_drvdata(&client->dev, data);
|
|
}
|
|
|
|
int anybuss_set_power(struct anybuss_client *client, bool power_on);
|
|
|
|
struct anybuss_memcfg {
|
|
u16 input_io;
|
|
u16 input_dpram;
|
|
u16 input_total;
|
|
|
|
u16 output_io;
|
|
u16 output_dpram;
|
|
u16 output_total;
|
|
|
|
enum fieldbus_dev_offl_mode offl_mode;
|
|
};
|
|
|
|
int anybuss_start_init(struct anybuss_client *client,
|
|
const struct anybuss_memcfg *cfg);
|
|
int anybuss_finish_init(struct anybuss_client *client);
|
|
int anybuss_read_fbctrl(struct anybuss_client *client, u16 addr,
|
|
void *buf, size_t count);
|
|
int anybuss_send_msg(struct anybuss_client *client, u16 cmd_num,
|
|
const void *buf, size_t count);
|
|
int anybuss_send_ext(struct anybuss_client *client, u16 cmd_num,
|
|
const void *buf, size_t count);
|
|
int anybuss_recv_msg(struct anybuss_client *client, u16 cmd_num,
|
|
void *buf, size_t count);
|
|
|
|
/* these help clients make a struct file_operations */
|
|
int anybuss_write_input(struct anybuss_client *client,
|
|
const char __user *buf, size_t size,
|
|
loff_t *offset);
|
|
int anybuss_read_output(struct anybuss_client *client,
|
|
char __user *buf, size_t size,
|
|
loff_t *offset);
|
|
|
|
#endif /* __LINUX_ANYBUSS_CLIENT_H__ */
|