104 lines
2.7 KiB
C
104 lines
2.7 KiB
C
/*
|
|
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef __MSM_BCL_H
|
|
#define __MSM_BCL_H
|
|
|
|
#define BCL_NAME_MAX_LEN 20
|
|
|
|
enum bcl_trip_type {
|
|
BCL_HIGH_TRIP,
|
|
BCL_LOW_TRIP,
|
|
BCL_TRIP_MAX,
|
|
};
|
|
|
|
enum bcl_param {
|
|
BCL_PARAM_VOLTAGE,
|
|
BCL_PARAM_CURRENT,
|
|
BCL_PARAM_MAX,
|
|
};
|
|
|
|
struct bcl_threshold {
|
|
int trip_value;
|
|
enum bcl_trip_type type;
|
|
void *trip_data;
|
|
void (*trip_notify) (enum bcl_trip_type, int, void *);
|
|
};
|
|
struct bcl_param_data;
|
|
struct bcl_driver_ops {
|
|
int (*read) (int *);
|
|
int (*set_high_trip) (int);
|
|
int (*get_high_trip) (int *);
|
|
int (*set_low_trip) (int);
|
|
int (*get_low_trip) (int *);
|
|
int (*disable) (void);
|
|
int (*enable) (void);
|
|
int (*notify) (struct bcl_param_data *, int,
|
|
enum bcl_trip_type);
|
|
};
|
|
|
|
struct bcl_param_data {
|
|
char name[BCL_NAME_MAX_LEN];
|
|
struct device device;
|
|
struct bcl_driver_ops *ops;
|
|
int high_trip;
|
|
int low_trip;
|
|
int last_read_val;
|
|
bool registered;
|
|
struct kobj_attribute val_attr;
|
|
struct kobj_attribute high_trip_attr;
|
|
struct kobj_attribute low_trip_attr;
|
|
struct attribute_group bcl_attr_gp;
|
|
struct bcl_threshold *thresh[BCL_TRIP_MAX];
|
|
};
|
|
|
|
#ifdef CONFIG_MSM_BCL_CTL
|
|
struct bcl_param_data *msm_bcl_register_param(enum bcl_param,
|
|
struct bcl_driver_ops *, char *);
|
|
int msm_bcl_unregister_param(struct bcl_param_data *);
|
|
int msm_bcl_enable(void);
|
|
int msm_bcl_disable(void);
|
|
int msm_bcl_set_threshold(enum bcl_param, enum bcl_trip_type,
|
|
struct bcl_threshold *);
|
|
int msm_bcl_read(enum bcl_param, int *);
|
|
#else
|
|
static inline struct bcl_param_data *msm_bcl_register_param(
|
|
enum bcl_param param_type, struct bcl_driver_ops *ops, char *name)
|
|
{
|
|
return NULL;
|
|
}
|
|
static inline int msm_bcl_unregister_param(struct bcl_param_data *data)
|
|
{
|
|
return -ENOSYS;
|
|
}
|
|
static inline int msm_bcl_enable(void)
|
|
{
|
|
return -ENOSYS;
|
|
}
|
|
static inline int msm_bcl_disable(void)
|
|
{
|
|
return -ENOSYS;
|
|
}
|
|
static inline int msm_bcl_set_threshold(enum bcl_param param_type,
|
|
enum bcl_trip_type type,
|
|
struct bcl_threshold *inp_thresh)
|
|
{
|
|
return -ENOSYS;
|
|
}
|
|
static inline int msm_bcl_read(enum bcl_param param_type, int *vbat_value)
|
|
{
|
|
return -ENOSYS;
|
|
}
|
|
#endif
|
|
|
|
#endif /*__MSM_BCL_H*/
|