int (*get_cooling_device_max_state)(char *cooling_device_name);
};
+struct pass_resource_battery_ops {
+ /* Get and set the state of batterh charging */
+ int (*set_charging_status)(char *res_name, int state);
+ int (*get_charging_status)(char *res_name);
+
+ /* Get and set the battery charging current (unit: uA) */
+ int (*set_charging_current)(char *res_name, int charing_current_uA);
+ int (*get_charging_current)(char *res_name);
+};
+
/*
* Define the resource structure for CPU H/W.
*
* Define the resource structure for Battery H/W.
*
* @tmu : function lists for the TMU (Thermal Management Unit).
+ * @battery : function lists for the battery charging.
*/
struct pass_resource_battery {
struct pass_resource_tmu_ops tmu;
+ struct pass_resource_battery_ops battery;
};
/*
* Define the resource structure for nonstandard H/W.
*
* @tmu : function lists for the TMU (Thermal Management Unit).
+ * @battery : function lists for the battery charging.
*
* Following function is Deprecated. (Not recommended for use)
* @set_pmqos_data : function to bypass the scenario data to HAL.
*/
struct pass_resource_nonstandard {
struct pass_resource_tmu_ops tmu;
+ struct pass_resource_battery_ops battery;
/*
* NOTE: It is not propper method. But PASS must need to keep
/* Get maximum state of thermal cooling-device */
int hal_power_thermal_get_cooling_device_max_state(unsigned int device_type, char *cooling_device_name);
+/* Get and set the batterh charging state */
+int hal_power_battery_set_charging_status(unsigned int device_type, char *res_name, int state);
+int hal_power_battery_get_charging_status(unsigned int device_type, char *res_name);
+
+/* Get and set the battery charging current (unit: uA) */
+int hal_power_battery_set_charging_current(unsigned int device_type, char *res_name, int charing_current_uA);
+int hal_power_battery_get_charging_current(unsigned int device_type, char *res_name);
+
/**
* Memory Operation for Memory H/W
*/
return hotplug;
}
+static struct pass_resource_battery_ops *get_charging(hal_backend_power_funcs *funcs,
+ int res_type)
+{
+ struct pass_resource_battery_ops *charging = NULL;
+
+ switch (res_type) {
+ case PASS_RESOURCE_BATTERY_ID:
+ if (funcs && funcs->battery)
+ charging = &(funcs->battery->battery);
+ break;
+ case PASS_RESOURCE_NONSTANDARD_ID:
+ if (funcs && funcs->nonstandard)
+ charging = &(funcs->nonstandard->battery);
+ break;
+ }
+
+ return charging;
+}
+
EXPORT int hal_power_get_backend(unsigned int res_type)
{
if (!g_power_funcs) {
return tmu->get_cooling_device_max_state(cooling_device_name);
}
+EXPORT int hal_power_battery_set_charging_status(unsigned int device_type,
+ char *res_name,
+ int state)
+{
+ struct pass_resource_battery_ops *charging;
+
+ if (!g_power_funcs)
+ return -ENOTSUP;
+
+ if (!res_name)
+ return -EINVAL;
+
+ charging = get_charging(g_power_funcs, device_type);
+ if (!charging)
+ return -EPERM;
+
+ if (!charging->set_charging_status)
+ return -ENOTSUP;
+
+ return charging->set_charging_status(res_name, state);
+}
+
+EXPORT int hal_power_battery_get_charging_status(unsigned int device_type,
+ char *res_name)
+{
+ struct pass_resource_battery_ops *charging;
+
+ if (!g_power_funcs)
+ return -ENOTSUP;
+
+ if (!res_name)
+ return -EINVAL;
+
+ charging = get_charging(g_power_funcs, device_type);
+ if (!charging)
+ return -EPERM;
+
+ if (!charging->get_charging_status)
+ return -ENOTSUP;
+
+ return charging->get_charging_status(res_name);
+}
+
+EXPORT int hal_power_battery_set_charging_current(unsigned int device_type,
+ char *res_name,
+ int charing_current_uA)
+{
+ struct pass_resource_battery_ops *charging;
+
+ if (!g_power_funcs)
+ return -ENOTSUP;
+
+ if (!res_name)
+ return -EINVAL;
+
+ charging = get_charging(g_power_funcs, device_type);
+ if (!charging)
+ return -EPERM;
+
+ if (!charging->set_charging_current)
+ return -ENOTSUP;
+
+ return charging->set_charging_current(res_name, charing_current_uA);
+}
+
+EXPORT int hal_power_battery_get_charging_current(unsigned int device_type,
+ char *res_name)
+{
+ struct pass_resource_battery_ops *charging;
+
+ if (!g_power_funcs)
+ return -ENOTSUP;
+
+ if (!res_name)
+ return -EINVAL;
+
+ charging = get_charging(g_power_funcs, device_type);
+ if (!charging)
+ return -EPERM;
+
+ if (!charging->get_charging_current)
+ return -ENOTSUP;
+
+ return charging->get_charging_current(res_name);
+}
+
/**
* Memory Operation for Memory H/W
*/