/* * 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*/