Lines Matching +full:single +full:- +full:channel
2 * Copyright (C) 2001-2004 Aurelien Jarno <aurelien@aurel32.net>
37 " 0 = four single ended inputs\n"
39 " 2 = single ended and differential mixed\n"
53 * 0x00 = four single ended inputs
55 * 0x20 = single ended and differential mixed
64 * Channel selection
65 * 0x00 = channel 0
66 * 0x01 = channel 1
67 * 0x02 = channel 2
68 * 0x03 = channel 3
77 #define REG_TO_SIGNED(reg) (((reg) & 0x80) ? ((reg) - 256) : (reg))
88 static int pcf8591_read_channel(struct device *dev, int channel);
91 #define show_in_channel(channel) \ argument
92 static ssize_t show_in##channel##_input(struct device *dev, \
96 return sprintf(buf, "%d\n", pcf8591_read_channel(dev, channel));\
98 static DEVICE_ATTR(in##channel##_input, S_IRUGO, \
99 show_in##channel##_input, NULL);
110 return sprintf(buf, "%d\n", data->aout * 10); in out0_output_show()
128 return -EINVAL; in out0_output_store()
130 data->aout = val; in out0_output_store()
131 i2c_smbus_write_byte_data(client, data->control, data->aout); in out0_output_store()
141 return sprintf(buf, "%u\n", !(!(data->control & PCF8591_CONTROL_AOEF))); in out0_enable_show()
157 mutex_lock(&data->update_lock); in out0_enable_store()
159 data->control |= PCF8591_CONTROL_AOEF; in out0_enable_store()
161 data->control &= ~PCF8591_CONTROL_AOEF; in out0_enable_store()
162 i2c_smbus_write_byte(client, data->control); in out0_enable_store()
163 mutex_unlock(&data->update_lock); in out0_enable_store()
201 data = devm_kzalloc(&client->dev, sizeof(struct pcf8591_data), in pcf8591_probe()
204 return -ENOMEM; in pcf8591_probe()
207 mutex_init(&data->update_lock); in pcf8591_probe()
213 err = sysfs_create_group(&client->dev.kobj, &pcf8591_attr_group); in pcf8591_probe()
219 err = device_create_file(&client->dev, &dev_attr_in2_input); in pcf8591_probe()
224 /* Register input3 only in "four single ended inputs" mode */ in pcf8591_probe()
226 err = device_create_file(&client->dev, &dev_attr_in3_input); in pcf8591_probe()
231 data->hwmon_dev = hwmon_device_register(&client->dev); in pcf8591_probe()
232 if (IS_ERR(data->hwmon_dev)) { in pcf8591_probe()
233 err = PTR_ERR(data->hwmon_dev); in pcf8591_probe()
240 sysfs_remove_group(&client->dev.kobj, &pcf8591_attr_group_opt); in pcf8591_probe()
241 sysfs_remove_group(&client->dev.kobj, &pcf8591_attr_group); in pcf8591_probe()
249 hwmon_device_unregister(data->hwmon_dev); in pcf8591_remove()
250 sysfs_remove_group(&client->dev.kobj, &pcf8591_attr_group_opt); in pcf8591_remove()
251 sysfs_remove_group(&client->dev.kobj, &pcf8591_attr_group); in pcf8591_remove()
259 data->control = PCF8591_INIT_CONTROL; in pcf8591_init_client()
260 data->aout = PCF8591_INIT_AOUT; in pcf8591_init_client()
262 i2c_smbus_write_byte_data(client, data->control, data->aout); in pcf8591_init_client()
271 static int pcf8591_read_channel(struct device *dev, int channel) in pcf8591_read_channel() argument
277 mutex_lock(&data->update_lock); in pcf8591_read_channel()
279 if ((data->control & PCF8591_CONTROL_AICH_MASK) != channel) { in pcf8591_read_channel()
280 data->control = (data->control & ~PCF8591_CONTROL_AICH_MASK) in pcf8591_read_channel()
281 | channel; in pcf8591_read_channel()
282 i2c_smbus_write_byte(client, data->control); in pcf8591_read_channel()
292 mutex_unlock(&data->update_lock); in pcf8591_read_channel()
294 if ((channel == 2 && input_mode == 2) || in pcf8591_read_channel()
295 (channel != 3 && (input_mode == 1 || input_mode == 3))) in pcf8591_read_channel()