summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/dahdi/wctdm24xxp/base.c25
-rw-r--r--drivers/dahdi/wctdm24xxp/wctdm24xxp.h3
2 files changed, 21 insertions, 7 deletions
diff --git a/drivers/dahdi/wctdm24xxp/base.c b/drivers/dahdi/wctdm24xxp/base.c
index f42ea2d..e28dc49 100644
--- a/drivers/dahdi/wctdm24xxp/base.c
+++ b/drivers/dahdi/wctdm24xxp/base.c
@@ -921,12 +921,8 @@ static inline void wctdm_transmitprep(struct wctdm *wc, unsigned char *writechun
if (x < DAHDI_CHUNKSIZE - 1) {
writechunk[EFRAME_SIZE] = wc->ctlreg;
writechunk[EFRAME_SIZE + 1] = wc->txident++;
-
- if ((wc->desc->ports == 4) && ((wc->ctlreg & 0x10))) {
- writechunk[EFRAME_SIZE + 2] = 0;
- for (y = 0; y < 4; y++)
- writechunk[EFRAME_SIZE + 2] |= (1 << y);
- }
+ if (4 == wc->desc->ports)
+ writechunk[EFRAME_SIZE + 2] = wc->tdm410leds;
}
writechunk += (EFRAME_SIZE + EFRAME_GAP);
}
@@ -4592,6 +4588,21 @@ static inline void remove_sysfs_files(struct wctdm *wc) { return; }
#endif /* CONFIG_VOICEBUS_SYSFS */
+static void wctdm_set_tdm410_leds(struct wctdm *wc)
+{
+ int i;
+
+ if (4 != wc->desc->ports)
+ return;
+
+ wc->tdm410leds = 0; /* all on by default */
+ for (i = 0; i < wc->desc->ports; ++i) {
+ /* Turn off the LED for any module that isn't installed. */
+ if (MOD_TYPE_NONE == wc->modtype[i])
+ wc->tdm410leds |= (1 << i);
+ }
+}
+
#ifdef USE_ASYNC_INIT
struct async_data {
struct pci_dev *pdev;
@@ -4734,6 +4745,8 @@ __wctdm_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
/* Now track down what modules are installed */
wctdm_identify_modules(wc);
+ wctdm_set_tdm410_leds(wc);
+
if (fatal_signal_pending(current)) {
wctdm_back_out_gracefully(wc);
return -EINTR;
diff --git a/drivers/dahdi/wctdm24xxp/wctdm24xxp.h b/drivers/dahdi/wctdm24xxp/wctdm24xxp.h
index cacd062..46c6c2e 100644
--- a/drivers/dahdi/wctdm24xxp/wctdm24xxp.h
+++ b/drivers/dahdi/wctdm24xxp/wctdm24xxp.h
@@ -165,7 +165,8 @@ struct wctdm {
unsigned char rxident;
int flags[NUM_MODULES]; /* bitmap of board-specific + module-specific flags */
- unsigned char ctlreg; /* FIXME: something to do with VPM? */
+ u8 ctlreg;
+ u8 tdm410leds;
int mods_per_board; /* maximum number of modules for this board */
int digi_mods; /* number of digital modules present */