1
0
mirror of https://github.com/physwizz/a155-U-u1.git synced 2025-09-26 19:04:54 +00:00
Files
a155-U-u1/kernel-5.10/drivers/gpu/drm/samsung/panel/panel_power_ctrl.h
physwizz 99537be4e2 first
2024-03-11 06:53:12 +11:00

91 lines
2.8 KiB
C

#ifndef __PANEL_POWER_CTRL_H__
#define __PANEL_POWER_CTRL_H__
#include <linux/of.h>
#include <dt-bindings/display/panel-display.h>
#include "panel_drv.h"
#include "panel_gpio.h"
#include "panel_regulator.h"
#define call_panel_power_ctrl_func(q, _f, args...) \
(((q) && (q)->funcs && (q)->funcs->_f) ? ((q)->funcs->_f(q, ##args)) : 0)
#define PARSE_REG (1 << 0)
#define PARSE_GPIO (1 << 1)
#define PARSE_VALUE (1 << 2)
#define REQUIRE_PARSE_REG(x) ((x) & PARSE_REG)
#define REQUIRE_PARSE_GPIO(x) ((x) & PARSE_GPIO)
#define REQUIRE_PARSE_VALUE(x) ((x) & PARSE_VALUE)
enum panel_power_ctrl_action_type {
PANEL_POWER_CTRL_ACTION_NONE = PCTRL_NONE,
PANEL_POWER_CTRL_ACTION_DELAY_MSLEEP = PCTRL_DELAY_MSLEEP,
PANEL_POWER_CTRL_ACTION_DELAY_USLEEP = PCTRL_DELAY_USLEEP,
PANEL_POWER_CTRL_ACTION_REGULATOR_ENABLE = PCTRL_REGULATOR_ENABLE,
PANEL_POWER_CTRL_ACTION_REGULATOR_DISABLE = PCTRL_REGULATOR_DISABLE,
PANEL_POWER_CTRL_ACTION_REGULATOR_SET_VOLTAGE = PCTRL_REGULATOR_SET_VOLTAGE,
PANEL_POWER_CTRL_ACTION_REGULATOR_SSD_CURRENT = PCTRL_REGULATOR_SSD_CURRENT,
PANEL_POWER_CTRL_ACTION_GPIO_ENABLE = PCTRL_GPIO_ENABLE,
PANEL_POWER_CTRL_ACTION_GPIO_DISABLE = PCTRL_GPIO_DISABLE,
PANEL_POWER_CTRL_ACTION_REGULATOR_FORCE_DISABLE = PCTRL_REGULATOR_FORCE_DISABLE,
MAX_PANEL_POWER_CTRL_ACTION,
};
struct panel_power_ctrl_action {
enum panel_power_ctrl_action_type type;
const char *name;
struct list_head head;
struct panel_regulator *reg;
struct panel_gpio *gpio;
u32 value;
};
struct panel_power_ctrl {
const char *dev_name;
const char *name;
struct list_head head;
struct list_head action_list;
struct panel_power_ctrl_funcs *funcs;
};
struct panel_power_ctrl_funcs {
int (*execute)(struct panel_power_ctrl *pctrl);
};
struct pwrctrl {
struct pnobj base;
char *key;
};
#define PWRCTRL_INIT(_name_, _key_) { \
.base = __PNOBJ_INITIALIZER(_name_, CMD_TYPE_PCTRL) \
, .key = (_key_) }
#define DEFINE_PCTRL(_name_, _key_) \
struct pwrctrl PN_CONCAT(pwrctrl_, _name_) = \
PWRCTRL_INIT(_name_, _key_)
#define PWRCTRL(_name_) PN_CONCAT(pwrctrl_, _name_)
static inline char *get_pwrctrl_name(struct pwrctrl *pwrctrl)
{
return get_pnobj_name(&pwrctrl->base);
}
static inline char *get_pwrctrl_key(struct pwrctrl *pwrctrl)
{
return pwrctrl->key;
}
int of_get_panel_power_ctrl(struct panel_device *panel, struct device_node *seq_np,
const char *prop_name, struct panel_power_ctrl *pctrl);
int panel_power_ctrl_helper_execute(struct panel_power_ctrl *pctrl);
bool panel_power_ctrl_exists(struct panel_device *panel,
const char *dev_name, const char *name);
int panel_power_ctrl_execute(struct panel_device *panel,
const char *dev_name, const char *name);
struct pwrctrl *create_pwrctrl(char *name, char *key);
struct pwrctrl *duplicate_pwrctrl(struct pwrctrl *pwrctrl);
void destroy_pwrctrl(struct pwrctrl *pwrctrl);
#endif