#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/err.h>
#include <linux/string.h>
#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/regulator/driver.h>
#include <linux/regulator/machine.h>
#include <linux/of.h>
#include <linux/regulator/of_regulator.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#include <linux/regmap.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <asm/io.h>
//#include <comip/comip-regs.h>
//#include <comip/comip_devinfo.h>
#define MAX5395_I2C_ADDR (0x2B)
//#define REG_WIPER (0x00)
#define REG_CONFIG (0x80)
#define MAX5395_QP (1 << 7)//CHARGE_PUMP_STATUS
#define MAX5395_HSW (1 << 4)
#define MAX5395_LSW (1 << 3)
#define MAX5395_WSW (1 << 2)
#define MAX5395_TSEL (0) /*00-wiper is at wiper register,01-wiper is at 00,10-wiper is at0x80,11-wiper is at 0xff*/
/*write cmd*/
#define REG_WIPER (0x00) /*set the wiper position*/
#define REG_SD_CLR (0x80) /*clear shut down condition*/
#define REG_SD_H_WREG (0x90) /*open terminal H and shut down*/
#define REG_SD_H_ZERO (0x91) /*set wiper to 0,open H, shut down*/
#define REG_SD_H_MID (0x92) /*set wiper to 0x80,open H, shut down*/
#define REG_SD_H_FULL (0x93) /*set wiper to 0xff,open H, shut down*/
#define REG_SD_L_WREG (0x88) /*open L, shut down*/
#define REG_SD_L_ZERO (0x89) /*set wiper to 0,open L, shut down*/
#define REG_SD_L_MID (0x8A) /*set wiper to 0x80,open L, shut down*/
#define REG_SD_L_FULL (0x8B) /*set wiper to 0xff,open L, shut down*/
#define REG_SD_W (0x84) /*open W, shut down*/
#define REG_QP_OFF (0xA0) /*charge pump off*/
#define REG_QP_ON (0xA1) /*charge pump on*/
#define REG_RST (0xC0) /*reset to power on defaults*/
struct max5395 {
struct i2c_client *client;
struct device *dev;
struct regulator_dev *regulator;
struct regulator_init_data *init_data;
struct regmap *regmap;
struct pinctrl *pinctrl;
struct pinctrl_state *i2c_state;
int id;
struct attribute_group *attr_grp;
};
static struct regmap_config max5395_regmap_config = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0xf,
};
static ssize_t wiper_show(struct device *dev, struct device_attribute *attr, char *buf)
{
int val;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_read(pdata->regmap, REG_WIPER, &val);
return sprintf(buf, "%d\n", val);
}
static ssize_t wiper_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
struct max5395 *pdata = dev_get_drvdata(dev);
u8 val;
unsigned int data;
int ret = kstrtou8(buf, 10, &val);
data = val;
ret = regmap_write(pdata->regmap, REG_WIPER, data);
return len;
}
static ssize_t config_show(struct device *dev, struct device_attribute *attr, char *buf)
{
int val;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_read(pdata->regmap, REG_CONFIG, &val);
return sprintf(buf, "%d\n", val);
}
static ssize_t sd_clr_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_CLR, val);
return len;
}
static ssize_t sd_h_wreg_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_H_WREG, val);
return len;
}
static ssize_t sd_h_zero_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_H_ZERO, val);
return len;
}
static ssize_t sd_h_mid_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_H_MID, val);
return len;
}
static ssize_t sd_h_full_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_H_FULL, val);
return len;
}
static ssize_t sd_l_wreg_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_L_WREG, val);
return len;
}
static ssize_t sd_l_zero_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_L_ZERO, val);
return len;
}
static ssize_t sd_l_mid_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_L_MID, val);
return len;
}
static ssize_t sd_l_full_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_L_FULL, val);
return len;
}
static ssize_t sd_w_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_SD_W, val);
return len;
}
static ssize_t sd_qp_off_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_QP_OFF, val);
return len;
}
static ssize_t sd_qp_on_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_QP_ON, val);
return len;
}
static ssize_t sd_rst_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
unsigned int val = 0;
struct max5395 *pdata = dev_get_drvdata(dev);
regmap_write(pdata->regmap, REG_RST, val);
return len;
}
static DEVICE_ATTR(wiper, S_IRUGO | S_IWUSR, wiper_show, wiper_store);
static DEVICE_ATTR(config, S_IRUGO | S_IWUSR, config_show, NULL);
static DEVICE_ATTR(sd_clr, S_IRUGO | S_IWUSR, NULL, sd_clr_store);
static DEVICE_ATTR(sd_h_wreg, S_IRUGO | S_IWUSR, NULL, sd_h_wreg_store);
static DEVICE_ATTR(sd_h_zero, S_IRUGO | S_IWUSR, NULL, sd_h_zero_store);
static DEVICE_ATTR(sd_h_mid, S_IRUGO | S_IWUSR, NULL, sd_h_mid_store);
static DEVICE_ATTR(sd_h_full, S_IRUGO | S_IWUSR, NULL, sd_h_full_store);
static DEVICE_ATTR(sd_l_wreg, S_IRUGO | S_IWUSR, NULL, sd_l_wreg_store);
static DEVICE_ATTR(sd_l_zero, S_IRUGO | S_IWUSR, NULL, sd_l_zero_store);
static DEVICE_ATTR(sd_l_mid, S_IRUGO | S_IWUSR, NULL, sd_l_mid_store);
static DEVICE_ATTR(sd_l_full, S_IRUGO | S_IWUSR, NULL, sd_l_full_store);
static DEVICE_ATTR(sd_w, S_IRUGO | S_IWUSR, NULL, sd_w_store);
static DEVICE_ATTR(sd_qp_off, S_IRUGO | S_IWUSR, NULL, sd_qp_off_store);
static DEVICE_ATTR(sd_qp_on, S_IRUGO | S_IWUSR, NULL, sd_qp_on_store);
static DEVICE_ATTR(sd_rst, S_IRUGO | S_IWUSR, NULL, sd_rst_store);
static struct attribute *max5395_attributes[] = {
&dev_attr_wiper.attr,
&dev_attr_config.attr,
&dev_attr_sd_clr.attr,
&dev_attr_sd_h_wreg.attr,
&dev_attr_sd_h_zero.attr,
&dev_attr_sd_h_mid.attr,
&dev_attr_sd_h_full.attr,
&dev_attr_sd_l_wreg.attr,
&dev_attr_sd_l_zero.attr,
&dev_attr_sd_l_mid.attr,
&dev_attr_sd_l_full.attr,
&dev_attr_sd_w.attr,
&dev_attr_sd_qp_off.attr,
&dev_attr_sd_qp_on.attr,
&dev_attr_sd_rst.attr,
NULL,
};
static struct attribute_group max5395_attr_group = {
.attrs = max5395_attributes,
};
static int max5395_parse_dt(struct device *dev, struct max5395 *max5395)
{
int ret = 0;
if (max5395->id == 0) {
return 0;
}
// max5395->pinctrl = devm_pinctrl_get(dev);
// if (IS_ERR(max5395->pinctrl)
max5395的linux下的驱动
需积分: 20 98 浏览量
2023-03-12
13:21:05
上传
评论
收藏 20KB GZ 举报
顺风耳07
- 粉丝: 0
- 资源: 6
最新资源
- 优化BP神经网络(GWO-BP)灰狼算法
- 基于vue+nodejs毕业设计-在线购物商城系统(源码+数据库+文档说明)
- python+django+博客+学习
- (灰狼算法)优化BP神经网络(GWO-BP)
- 000001~000030股票数据(上市至2017年7月5日)
- 人种黄种人白人黑人分类数据集970张4类别.7z
- 基于SpringBoot+Vue+MySql的网上图书商城(包括源码、数据库)高分毕设
- 车载显示引领座舱智能化,行业提质扩容在即
- 基于springboot+vue的网上书店系统源码+数据库+文档说明(高分毕设)
- 数据仓库与数据挖掘实验报告(python实现,包括关联规则、决策树、聚类分析、贝叶斯网络、神经网络和遗传算法的应用)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈