summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/card_fxo.c
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2008-10-27 16:00:49 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2008-10-27 16:00:49 +0000
commit120d03c7a545600f7d2c4aa5e5f72cffccf115fa (patch)
treef5f150aee155f37ad02027b62b776c870570bbe4 /drivers/dahdi/xpp/card_fxo.c
parent1dfdd987165c27d786ef28abd78eca0b67dff62a (diff)
xpp fxo: Add sysfs battery attribute.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@5133 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/xpp/card_fxo.c')
-rw-r--r--drivers/dahdi/xpp/card_fxo.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/drivers/dahdi/xpp/card_fxo.c b/drivers/dahdi/xpp/card_fxo.c
index bc0590a..d56382e 100644
--- a/drivers/dahdi/xpp/card_fxo.c
+++ b/drivers/dahdi/xpp/card_fxo.c
@@ -1313,9 +1313,44 @@ static int proc_xpd_metering_read(char *page, char **start, off_t off, int count
}
#endif
+static DEVICE_ATTR_READER(fxo_battery_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct FXO_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+ int i;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ for_each_line(xpd, i) {
+ char bat;
+
+ if(priv->battery[i] == BATTERY_ON)
+ bat = '+';
+ else if(priv->battery[i] == BATTERY_OFF)
+ bat = '-';
+ else
+ bat = '.';
+ len += sprintf(buf + len, "%c ", bat);
+ }
+ len += sprintf(buf + len, "\n");
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR(fxo_battery, S_IRUGO, fxo_battery_show, NULL);
+
+
static int fxo_xpd_probe(struct device *dev)
{
xpd_t *xpd;
+ int ret;
xpd = dev_to_xpd(dev);
/* Is it our device? */
@@ -1325,7 +1360,14 @@ static int fxo_xpd_probe(struct device *dev)
return -EINVAL;
}
XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ ret = device_create_file(dev, &dev_attr_fxo_battery);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(fxo_battery) failed: %d\n", __FUNCTION__, ret);
+ goto fail_fxo_battery;
+ }
return 0;
+fail_fxo_battery:
+ return ret;
}
static int fxo_xpd_remove(struct device *dev)
@@ -1334,6 +1376,7 @@ static int fxo_xpd_remove(struct device *dev)
xpd = dev_to_xpd(dev);
XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ device_remove_file(dev, &dev_attr_fxo_battery);
return 0;
}