#define ip_debug(fmt, args...) do { \
printk(KERN_INFO "[ip5310/E]%s:line: %d:"fmt"\n", __func__,__LINE__, ##args); \
} while (0)
static ssize_t addr_value_show(struct device *dev, struct device_attribute *attr, char *buf)
{
struct sc8989x *sc = dev_get_drvdata(dev);
u8 val;
if (!sc)
return -ENODEV;
if (sc8989x_read_byte(sc, buf, &val))
return -EIO;
return sprintf(buf, "0x%X\n", val);
}
static ssize_t addr_value_store(struct device *dev,
struct device_attribute *attr, const char *buf,
size_t count)
{
struct sc8989x *sc = dev_get_drvdata(dev);
uint8_t reg_addr, data;
ssize_t ret;
if (sscanf(buf, "0x%hhx+0x%hhx", ®_addr, &data) != 2) {
fgu_err(" addr_value_store Failed\n");
return -EINVAL;
}
fgu_err("Register Address: 0x%x, Data: 0x%x\n", reg_addr, data);
ret = sc8989x_write_byte(sc, reg_addr, data);
if (ret < 0) {
fgu_err(" addr_value write Failed\n");
return ret;
}
return count;
}
static DEVICE_ATTR(addr_value, S_IRUGO | S_IWUSR, addr_value_show, addr_value_store);
static struct attribute *sc8989x_attributes[] = {
&dev_attr_addr_value.attr,
NULL,
};
static const struct attribute_group sc8989x_attr_group = {
.attrs = sc8989x_attributes,
};
ret = sysfs_create_group(&sc->dev->kobj, &sc8989x_attr_group);
if (ret){
dev_err(sc->dev, "failed to register sysfs. err: %d\n", ret);
}
sysfs_remove_group(&sc->dev->kobj, &sc8989x_attr_group);
device_attr创建组用法
于 2024-04-30 10:44:06 首次发布
文章描述了一个与SC8989x芯片相关的驱动程序,涉及device_attribute中的addr_value读写功能,以及使用sysfs进行设备属性注册和注销的过程。
摘要由CSDN通过智能技术生成