Input: tsc2005 - hide selftest attribute if we can't reset
If implementation to perform self-test/reset has not been provided by the platform code hide 'selftest' sysfs attribute instead of returning error when someone tries to use it. Tested-by: Aaro Koskinen <aaro.koskinen@nokia.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
@@ -411,13 +411,6 @@ static ssize_t tsc2005_selftest_show(struct device *dev,
|
|||||||
u16 temp_high_test;
|
u16 temp_high_test;
|
||||||
unsigned int result;
|
unsigned int result;
|
||||||
|
|
||||||
if (!ts->set_reset) {
|
|
||||||
dev_warn(&ts->spi->dev,
|
|
||||||
"unable to selftest: no reset function\n");
|
|
||||||
result = 0;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_lock(&ts->mutex);
|
mutex_lock(&ts->mutex);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -451,11 +444,38 @@ static ssize_t tsc2005_selftest_show(struct device *dev,
|
|||||||
|
|
||||||
mutex_unlock(&ts->mutex);
|
mutex_unlock(&ts->mutex);
|
||||||
|
|
||||||
out:
|
|
||||||
return sprintf(buf, "%u\n", result);
|
return sprintf(buf, "%u\n", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEVICE_ATTR(selftest, S_IRUGO, tsc2005_selftest_show, NULL);
|
static DEVICE_ATTR(selftest, S_IRUGO, tsc2005_selftest_show, NULL);
|
||||||
|
|
||||||
|
static struct attribute *tsc2005_attrs[] = {
|
||||||
|
&dev_attr_disable.attr,
|
||||||
|
&dev_attr_selftest.attr,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static mode_t tsc2005_attr_is_visible(struct kobject *kobj,
|
||||||
|
struct attribute *attr, int n)
|
||||||
|
{
|
||||||
|
struct device *dev = container_of(kobj, struct device, kobj);
|
||||||
|
struct spi_device *spi = to_spi_device(dev);
|
||||||
|
struct tsc2005 *ts = spi_get_drvdata(spi);
|
||||||
|
mode_t mode = attr->mode;
|
||||||
|
|
||||||
|
if (attr == &dev_attr_selftest.attr) {
|
||||||
|
if (!ts->set_reset)
|
||||||
|
mode = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct attribute_group tsc2005_attr_group = {
|
||||||
|
.is_visible = tsc2005_attr_is_visible,
|
||||||
|
.attrs = tsc2005_attrs,
|
||||||
|
};
|
||||||
|
|
||||||
static void tsc2005_esd_timer(unsigned long data)
|
static void tsc2005_esd_timer(unsigned long data)
|
||||||
{
|
{
|
||||||
struct tsc2005 *ts = (struct tsc2005 *)data;
|
struct tsc2005 *ts = (struct tsc2005 *)data;
|
||||||
@@ -495,16 +515,6 @@ out:
|
|||||||
mutex_unlock(&ts->mutex);
|
mutex_unlock(&ts->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct attribute *tsc2005_attrs[] = {
|
|
||||||
&dev_attr_disable.attr,
|
|
||||||
&dev_attr_selftest.attr,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct attribute_group tsc2005_attr_group = {
|
|
||||||
.attrs = tsc2005_attrs,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __devinit tsc2005_setup_spi_xfer(struct tsc2005 *ts)
|
static void __devinit tsc2005_setup_spi_xfer(struct tsc2005 *ts)
|
||||||
{
|
{
|
||||||
tsc2005_setup_read(&ts->spi_x, TSC2005_REG_X, 0);
|
tsc2005_setup_read(&ts->spi_x, TSC2005_REG_X, 0);
|
||||||
|
Reference in New Issue
Block a user