goto finish;
/* provide input to SAR */
if (chip->value/2) {
- pr_info("%s :<-- undetect -->\n", __func__);
+ /* pr_info("%s :<-- undetect -->\n", __func__); */
gpio_direction_output(chip->sar_gpio, 1);
} else {
- pr_info("%s :--> detect <--\n", __func__);
+ /* pr_info("%s :--> detect <--\n", __func__); */
gpio_direction_output(chip->sar_gpio, 0);
}
} else {
queue_delayed_work(chip->sar_wq, &chip->sar_dw, msecs_to_jiffies(1000));
}
+static ssize_t show_proximity_status(struct device * dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
+ struct iqs253_chip *chip = iio_priv(indio_dev);
+ if (chip->version == 253) {
+ if (chip->value / 2)
+ return sprintf(buf, "1"); /* undetect */
+ return sprintf(buf, "0"); /* detect */
+ } else {
+ if ((chip->value & 0x04) != 0)
+ return sprintf(buf, "0"); /* detect */
+ return sprintf(buf, "1"); /* undetect */
+ }
+ return sprintf(buf, "invalid iqs sensor version..\n");
+}
+
+static IIO_CONST_ATTR(name, "iqs_sar_sensor");
+static IIO_DEVICE_ATTR(proximity_status, S_IRUGO, show_proximity_status,
+ NULL, 0);
+
+static struct attribute *iqs253_iio_attr[] = {
+ &iio_dev_attr_proximity_status.dev_attr.attr,
+ &iio_const_attr_name.dev_attr.attr,
+ NULL
+};
+
+static const struct attribute_group iqs253_iio_attr_grp = {
+ .attrs = iqs253_iio_attr,
+};
+
+static const struct iio_info iqs253_iio_info = {
+ .attrs = &iqs253_iio_attr_grp,
+ .driver_module = THIS_MODULE,
+};
+
static int iqs253_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
queue_delayed_work(iqs253_chip->sar_wq, &iqs253_chip->sar_dw, 0);
+ indio_dev->info = &iqs253_iio_info;
+ indio_dev->dev.parent = &client->dev;
+ indio_dev->modes = INDIO_DIRECT_MODE;
+ ret = iio_device_register(indio_dev);
+ if (ret) {
+ dev_err(&client->dev, "%s iio_device_register err\n", __func__);
+ goto err_iio_register;
+ }
+
dev_info(&client->dev, "devname:%s func:%s line:%d probe success\n",
id->name, __func__, __LINE__);
return 0;
+err_iio_register:
err_gpio_request:
if (iqs253_chip->sar_wq)
destroy_workqueue(iqs253_chip->sar_wq);