#include<linux/init.h>
#include<linux/module.h>
#include <linux/switch.h>
#include <linux/device.h>
static struct switch_dev switch_data;
static ssize_t inquire_state_show(struct device *dev,struct device_attribute *attr, char *buf)
{
return sprintf(buf, "%u\n", switch_data.state);
}
static ssize_t change_state_store(struct device *dev,struct device_attribute *attr, const char *buf, size_t count)
{
unsigned long val;
int ret;
ret = kstrtoul(buf, 10, &val);
if (ret < 0) {
dev_err(dev, "couldn't parse string %d\n", ret);
return ret;
}
switch_set_state(&switch_data,val);
return count;
}
static DEVICE_ATTR_RO(inquire_state);
static DEVICE_ATTR_WO(change_state);
static int switch_init(void)
{
int ret;
switch_data.name = "www";
switch_data.index = 0;
switch_data.state = 0;
ret = switch_dev_register(&switch_data);
if(ret)
{
printk("switch_dev_register returned:%d!\n", ret);
return ret;
}
ret = device_create_file(switch_data.dev, &dev_attr_inquire_state);
ret = device_create_file(switch_data.dev, &dev_attr_change_state);
printk("switch_init ok\n");
return 0;
}
static void switch_exit(void)
{
printk("switch_exit!");
}
module_init(switch_init);
module_exit(switch_exit);
MODULE_LICENSE("Dual BSD/GPL");