aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/atm/cxacru.c73
1 files changed, 31 insertions, 42 deletions
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index 8bcf7fe1dd80..1bc884051e0f 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -171,7 +171,7 @@ struct cxacru_data {
171 struct delayed_work poll_work; 171 struct delayed_work poll_work;
172 u32 card_info[CXINF_MAX]; 172 u32 card_info[CXINF_MAX];
173 struct mutex poll_state_serialize; 173 struct mutex poll_state_serialize;
174 int poll_state; 174 enum cxacru_poll_state poll_state;
175 175
176 /* contol handles */ 176 /* contol handles */
177 struct mutex cm_serialize; 177 struct mutex cm_serialize;
@@ -226,58 +226,48 @@ static ssize_t cxacru_sysfs_showattr_s8(s8 value, char *buf)
226 226
227static ssize_t cxacru_sysfs_showattr_dB(s16 value, char *buf) 227static ssize_t cxacru_sysfs_showattr_dB(s16 value, char *buf)
228{ 228{
229 if (unlikely(value < 0)) { 229 return snprintf(buf, PAGE_SIZE, "%d.%02u\n",
230 return snprintf(buf, PAGE_SIZE, "%d.%02u\n", 230 value / 100, abs(value) % 100);
231 value / 100, -value % 100);
232 } else {
233 return snprintf(buf, PAGE_SIZE, "%d.%02u\n",
234 value / 100, value % 100);
235 }
236} 231}
237 232
238static ssize_t cxacru_sysfs_showattr_bool(u32 value, char *buf) 233static ssize_t cxacru_sysfs_showattr_bool(u32 value, char *buf)
239{ 234{
240 switch (value) { 235 static char *str[] = { "no", "yes" };
241 case 0: return snprintf(buf, PAGE_SIZE, "no\n"); 236 if (unlikely(value >= ARRAY_SIZE(str)))
242 case 1: return snprintf(buf, PAGE_SIZE, "yes\n"); 237 return snprintf(buf, PAGE_SIZE, "%u\n", value);
243 default: return 0; 238 return snprintf(buf, PAGE_SIZE, "%s\n", str[value]);
244 }
245} 239}
246 240
247static ssize_t cxacru_sysfs_showattr_LINK(u32 value, char *buf) 241static ssize_t cxacru_sysfs_showattr_LINK(u32 value, char *buf)
248{ 242{
249 switch (value) { 243 static char *str[] = { NULL, "not connected", "connected", "lost" };
250 case 1: return snprintf(buf, PAGE_SIZE, "not connected\n"); 244 if (unlikely(value >= ARRAY_SIZE(str) || str[value] == NULL))
251 case 2: return snprintf(buf, PAGE_SIZE, "connected\n"); 245 return snprintf(buf, PAGE_SIZE, "%u\n", value);
252 case 3: return snprintf(buf, PAGE_SIZE, "lost\n"); 246 return snprintf(buf, PAGE_SIZE, "%s\n", str[value]);
253 default: return snprintf(buf, PAGE_SIZE, "unknown (%u)\n", value);
254 }
255} 247}
256 248
257static ssize_t cxacru_sysfs_showattr_LINE(u32 value, char *buf) 249static ssize_t cxacru_sysfs_showattr_LINE(u32 value, char *buf)
258{ 250{
259 switch (value) { 251 static char *str[] = { "down", "attempting to activate",
260 case 0: return snprintf(buf, PAGE_SIZE, "down\n"); 252 "training", "channel analysis", "exchange", "up",
261 case 1: return snprintf(buf, PAGE_SIZE, "attempting to activate\n"); 253 "waiting", "initialising"
262 case 2: return snprintf(buf, PAGE_SIZE, "training\n"); 254 };
263 case 3: return snprintf(buf, PAGE_SIZE, "channel analysis\n"); 255 if (unlikely(value >= ARRAY_SIZE(str)))
264 case 4: return snprintf(buf, PAGE_SIZE, "exchange\n"); 256 return snprintf(buf, PAGE_SIZE, "%u\n", value);
265 case 5: return snprintf(buf, PAGE_SIZE, "up\n"); 257 return snprintf(buf, PAGE_SIZE, "%s\n", str[value]);
266 case 6: return snprintf(buf, PAGE_SIZE, "waiting\n");
267 case 7: return snprintf(buf, PAGE_SIZE, "initialising\n");
268 default: return snprintf(buf, PAGE_SIZE, "unknown (%u)\n", value);
269 }
270} 258}
271 259
272static ssize_t cxacru_sysfs_showattr_MODU(u32 value, char *buf) 260static ssize_t cxacru_sysfs_showattr_MODU(u32 value, char *buf)
273{ 261{
274 switch (value) { 262 static char *str[] = {
275 case 0: return 0; 263 NULL,
276 case 1: return snprintf(buf, PAGE_SIZE, "ANSI T1.413\n"); 264 "ANSI T1.413",
277 case 2: return snprintf(buf, PAGE_SIZE, "ITU-T G.992.1 (G.DMT)\n"); 265 "ITU-T G.992.1 (G.DMT)",
278 case 3: return snprintf(buf, PAGE_SIZE, "ITU-T G.992.2 (G.LITE)\n"); 266 "ITU-T G.992.2 (G.LITE)"
279 default: return snprintf(buf, PAGE_SIZE, "unknown (%u)\n", value); 267 };
280 } 268 if (unlikely(value >= ARRAY_SIZE(str) || str[value] == NULL))
269 return snprintf(buf, PAGE_SIZE, "%u\n", value);
270 return snprintf(buf, PAGE_SIZE, "%s\n", str[value]);
281} 271}
282 272
283/* 273/*
@@ -308,11 +298,10 @@ static ssize_t cxacru_sysfs_show_adsl_state(struct device *dev,
308 struct cxacru_data *instance = usbatm_instance->driver_data; 298 struct cxacru_data *instance = usbatm_instance->driver_data;
309 u32 value = instance->card_info[CXINF_LINE_STARTABLE]; 299 u32 value = instance->card_info[CXINF_LINE_STARTABLE];
310 300
311 switch (value) { 301 static char *str[] = { "running", "stopped" };
312 case 0: return snprintf(buf, PAGE_SIZE, "running\n"); 302 if (unlikely(value >= ARRAY_SIZE(str)))
313 case 1: return snprintf(buf, PAGE_SIZE, "stopped\n"); 303 return snprintf(buf, PAGE_SIZE, "%u\n", value);
314 default: return snprintf(buf, PAGE_SIZE, "unknown (%u)\n", value); 304 return snprintf(buf, PAGE_SIZE, "%s\n", str[value]);
315 }
316} 305}
317 306
318static ssize_t cxacru_sysfs_store_adsl_state(struct device *dev, 307static ssize_t cxacru_sysfs_store_adsl_state(struct device *dev,