blob: b66e266ffcf2ac96b6b13f0144bb9e4c01c2c213 [file]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2020 MediaTek Inc.
*/
#ifndef _CHARGER_COOLING_H
#define _CHARGER_COOLING_H
#include <linux/thermal.h>
/*===========================================================
* Macro Definitions
*===========================================================
*/
#define CHARGER_COOLING_UNLIMITED_STATE (0)
#define CHARGER_STATE_NUM 9
#define MAX_CHARGER_COOLER_NAME_LEN (20)
/*==================================================
* Type Definitions
*==================================================
*/
enum charger_type {
SINGLE_CHARGER,
DUAL_CHARGER,
NUM_CHARGER_TYPE
};
/**
* struct charger_cooling_device - data for charger cooling device
* @name: naming string for this cooling device
* @target_state: target cooling state which is set in set_cur_state()
* callback.
* @max_state: maximum state supported for this cooling device
* @cdev: thermal_cooling_device pointer to keep track of the
* registered cooling device.
* @throttle: callback function to handle throttle request
* @dev: device node pointer
* @chg_psy: master charger power supply handle
* @s_chg_psy: slave charger power supply handle
*/
struct charger_cooling_device {
char name[MAX_CHARGER_COOLER_NAME_LEN];
unsigned long target_state;
unsigned long max_state;
struct thermal_cooling_device *cdev;
int (*throttle)(struct charger_cooling_device *charger_cdev, unsigned long state);
struct device *dev;
enum charger_type type;
struct power_supply *chg_psy;
struct power_supply *s_chg_psy;
const struct charger_cooling_platform_data *pdata;
};
/**
* struct charger_cooling_platform_data - charger cooler platform dependent data
* @state_to_charger_lv: callback function to transfer cooling state
* to chargering current LV
* @max_lv: max cooler LV supported by charger
*/
struct charger_cooling_platform_data {
int (*state_to_charger_limit)(struct charger_cooling_device *chg);
};
#endif