#ifndef _LENOVO_WMI_CAPDATA_H_
#define _LENOVO_WMI_CAPDATA_H_
#include <linux/bits.h>
#include <linux/types.h>
#define LWMI_SUPP_VALID BIT(0)
#define LWMI_SUPP_GET BIT(1)
#define LWMI_SUPP_SET BIT(2)
#define LWMI_ATTR_DEV_ID_MASK GENMASK(31, 24)
#define LWMI_ATTR_FEAT_ID_MASK GENMASK(23, 16)
#define LWMI_ATTR_MODE_ID_MASK GENMASK(15, 8)
#define LWMI_ATTR_TYPE_ID_MASK GENMASK(7, 0)
#define LWMI_DEVICE_ID_FAN 0x04
struct component_match;
struct device;
struct cd_list;
struct capdata00 {
u32 id;
u32 supported;
u32 default_value;
};
struct capdata01 {
u32 id;
u32 supported;
u32 default_value;
u32 step;
u32 min_value;
u32 max_value;
};
struct capdata_fan {
u32 id;
u32 min_rpm;
u32 max_rpm;
};
typedef void (*cd_list_cb_t)(struct device *master_dev, struct cd_list *cd_list);
struct lwmi_cd_binder {
struct cd_list *cd00_list;
struct cd_list *cd01_list;
cd_list_cb_t cd_fan_list_cb;
};
void lwmi_cd_match_add_all(struct device *master, struct component_match **matchptr);
int lwmi_cd00_get_data(struct cd_list *list, u32 attribute_id, struct capdata00 *output);
int lwmi_cd01_get_data(struct cd_list *list, u32 attribute_id, struct capdata01 *output);
int lwmi_cd_fan_get_data(struct cd_list *list, u32 attribute_id, struct capdata_fan *output);
#endif