tegrakernel/kernel/kernel-4.9/include/linux/padctrl/padctrl.h

153 lines
3.9 KiB
C
Raw Normal View History

2022-02-16 09:13:02 -06:00
/*
* Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope 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 __LINUX_PADCTRL_H
#define __LINUX_PADCTRL_H
#include <linux/device.h>
#include <linux/of.h>
struct padctrl;
struct padctrl_dev;
/*
* padctrl_ops: Callback API to implement the padcontrol specific ops.
*/
struct padctrl_ops {
int (*set_voltage)(struct padctrl_dev *pad_dev,
int pad_id, u32 voltage);
int (*get_voltage)(struct padctrl_dev *pad_dev,
int pad_id, u32 *voltage);
int (*power_enable)(struct padctrl_dev *pad_dev, int pad_id);
int (*power_disable)(struct padctrl_dev *pad_dev, int pad_id);
};
/*
* padctrl_desc: Padcontrol description describe the HW behavior.
*/
struct padctrl_desc {
const char *name;
struct padctrl_ops *ops;
};
/*
* padctrl_confif: Padcontrol configuration.
*/
struct padctrl_config {
const char *name;
struct device_node *of_node;
};
#ifdef CONFIG_PADCTRL
extern struct padctrl *padctrl_get(struct device *dev, const char *name);
extern void padctrl_put(struct padctrl *pctrl);
extern struct padctrl *devm_padctrl_get(struct device *dev, const char *name);
extern struct padctrl *devm_padctrl_get_from_node(struct device *dev,
struct device_node *np,
const char *name);
extern int padctrl_set_voltage(struct padctrl *pctrl, u32 voltage);
extern int padctrl_get_voltage(struct padctrl *pctrl, u32 *voltage);
extern int padctrl_power_enable(struct padctrl *pctrl);
extern int padctrl_power_disable(struct padctrl *pctrl);
extern struct padctrl_dev *padctrl_register(struct device *dev,
struct padctrl_desc *desc, struct padctrl_config *config);
extern void padctrl_unregister(struct padctrl_dev *pad_dev);
extern struct padctrl_dev *devm_padctrl_register(struct device *dev,
struct padctrl_desc *desc, struct padctrl_config *config);
extern void devm_padctrl_unregister(struct device *dev,
struct padctrl_dev *pad_dev);
extern void padctrl_set_drvdata(struct padctrl_dev *pad_dev, void *drv_data);
extern void *padctrl_get_drvdata(struct padctrl_dev *pad_dev);
#else
static inline struct padctrl *padctrl_get(struct device *dev,
const char *name)
{
return ERR_PTR(-ENODEV);
}
static inline void *padctrl_put(struct padctrl *pctrl)
{
return ERR_PTR(-ENODEV);
}
static inline struct padctrl *devm_padctrl_get(struct device *dev,
const char *name)
{
return ERR_PTR(-ENODEV);
}
static inline struct padctrl *devm_padctrl_get_from_node(struct device *dev,
struct device_node *np, const char *name)
{
return ERR_PTR(-ENODEV);
}
static inline int padctrl_set_voltage(struct padctrl *pctrl, u32 voltage)
{
return -EINVAL;
}
static inline int padctrl_get_voltage(struct padctrl *ctrl, u32 *voltage)
{
return -EINVAL;
}
static inline int padctrl_power_enable(struct padctrl *pctrl)
{
return -EINVAL;
}
static inline int padctrl_power_disable(struct padctrl *pctrl)
{
return -EINVAL;
}
static inline struct padctrl_dev *padctrl_register(struct device *dev,
struct padctrl_desc *desc, struct padctrl_config *config)
{
return ERR_PTR(-ENODEV);
}
static inline void padctrl_unregister(struct padctrl_dev *pad_dev)
{
}
static inline struct padctrl_dev *devm_padctrl_register(struct device *dev,
struct padctrl_desc *desc, struct padctrl_config *config)
{
return ERR_PTR(-ENODEV);
}
static inline void devm_padctrl_unregister(struct device *dev,
struct padctrl_dev *pad_dev)
{
}
static inline void padctrl_set_drvdata(struct padctrl_dev *pad_dev,
void *drv_data)
{
}
static inline void *padctrl_get_drvdata(struct padctrl_dev *pad_dev)
{
return NULL;
}
#endif
#endif