|
Lines 116-122
Link Here
|
| 116 |
size_t buf_size; |
116 |
size_t buf_size; |
| 117 |
char *buf; |
117 |
char *buf; |
| 118 |
uint8_t enabled; |
118 |
uint8_t enabled; |
| 119 |
struct class_device *class_dev; |
119 |
struct device *dev; |
| 120 |
}; |
120 |
}; |
| 121 |
|
121 |
|
| 122 |
static void enable_oled(struct asus_oled_dev *odev, uint8_t enabl) |
122 |
static void enable_oled(struct asus_oled_dev *odev, uint8_t enabl) |
|
Lines 166-174
Link Here
|
| 166 |
return count; |
166 |
return count; |
| 167 |
} |
167 |
} |
| 168 |
|
168 |
|
| 169 |
static ssize_t class_set_enabled(struct class_device *class_device, const char *buf, size_t count) |
169 |
static ssize_t class_set_enabled(struct device *device, struct device_attribute *attr, const char *buf, size_t count) |
| 170 |
{ |
170 |
{ |
| 171 |
struct asus_oled_dev *odev = (struct asus_oled_dev *) class_get_devdata(class_device); |
171 |
struct asus_oled_dev *odev = (struct asus_oled_dev *) dev_get_drvdata(device); |
| 172 |
|
172 |
|
| 173 |
int temp = simple_strtoul(buf, NULL, 10); |
173 |
int temp = simple_strtoul(buf, NULL, 10); |
| 174 |
|
174 |
|
|
Lines 185-193
Link Here
|
| 185 |
return sprintf(buf, "%d\n", odev->enabled); |
185 |
return sprintf(buf, "%d\n", odev->enabled); |
| 186 |
} |
186 |
} |
| 187 |
|
187 |
|
| 188 |
static ssize_t class_get_enabled(struct class_device *class_device, char *buf) |
188 |
static ssize_t class_get_enabled(struct device *device, struct device_attribute *attr, char *buf) |
| 189 |
{ |
189 |
{ |
| 190 |
struct asus_oled_dev *odev = (struct asus_oled_dev *) class_get_devdata(class_device); |
190 |
struct asus_oled_dev *odev = (struct asus_oled_dev *) dev_get_drvdata(device); |
| 191 |
|
191 |
|
| 192 |
return sprintf(buf, "%d\n", odev->enabled); |
192 |
return sprintf(buf, "%d\n", odev->enabled); |
| 193 |
} |
193 |
} |
|
Lines 426-434
Link Here
|
| 426 |
return odev_set_picture(usb_get_intfdata(intf), buf, count); |
426 |
return odev_set_picture(usb_get_intfdata(intf), buf, count); |
| 427 |
} |
427 |
} |
| 428 |
|
428 |
|
| 429 |
static ssize_t class_set_picture(struct class_device *class_device, const char *buf, size_t count) |
429 |
static ssize_t class_set_picture(struct device *device, struct device_attribute *attr, const char *buf, size_t count) |
| 430 |
{ |
430 |
{ |
| 431 |
return odev_set_picture((struct asus_oled_dev *) class_get_devdata(class_device), buf, count); |
431 |
return odev_set_picture((struct asus_oled_dev *) dev_get_drvdata(device), buf, count); |
| 432 |
} |
432 |
} |
| 433 |
|
433 |
|
| 434 |
#define ASUS_OLED_DEVICE_ATTR(_file) dev_attr_asus_oled_##_file |
434 |
#define ASUS_OLED_DEVICE_ATTR(_file) dev_attr_asus_oled_##_file |
|
Lines 436-443
Link Here
|
| 436 |
static DEVICE_ATTR(asus_oled_enabled, S_IWUGO | S_IRUGO, get_enabled, set_enabled); |
436 |
static DEVICE_ATTR(asus_oled_enabled, S_IWUGO | S_IRUGO, get_enabled, set_enabled); |
| 437 |
static DEVICE_ATTR(asus_oled_picture, S_IWUGO , NULL, set_picture); |
437 |
static DEVICE_ATTR(asus_oled_picture, S_IWUGO , NULL, set_picture); |
| 438 |
|
438 |
|
| 439 |
static CLASS_DEVICE_ATTR (enabled, S_IWUGO | S_IRUGO, class_get_enabled, class_set_enabled); |
439 |
static DEVICE_ATTR(enabled, S_IWUGO | S_IRUGO, class_get_enabled, class_set_enabled); |
| 440 |
static CLASS_DEVICE_ATTR (picture, S_IWUGO, NULL, class_set_picture); |
440 |
static DEVICE_ATTR(picture, S_IWUGO, NULL, class_set_picture); |
| 441 |
|
441 |
|
| 442 |
static int asus_oled_probe(struct usb_interface *interface, const struct usb_device_id *id) |
442 |
static int asus_oled_probe(struct usb_interface *interface, const struct usb_device_id *id) |
| 443 |
{ |
443 |
{ |
|
Lines 463-469
Link Here
|
| 463 |
odev->last_val = 0; |
463 |
odev->last_val = 0; |
| 464 |
odev->buf = NULL; |
464 |
odev->buf = NULL; |
| 465 |
odev->enabled = 1; |
465 |
odev->enabled = 1; |
| 466 |
odev->class_dev = 0; |
466 |
odev->dev = 0; |
| 467 |
|
467 |
|
| 468 |
usb_set_intfdata (interface, odev); |
468 |
usb_set_intfdata (interface, odev); |
| 469 |
|
469 |
|
|
Lines 475-495
Link Here
|
| 475 |
goto err_files; |
475 |
goto err_files; |
| 476 |
} |
476 |
} |
| 477 |
|
477 |
|
| 478 |
odev->class_dev = class_device_create(oled_class, NULL, MKDEV(0,0), |
478 |
odev->dev = device_create_drvdata(oled_class, &interface->dev, MKDEV(0,0), |
| 479 |
&interface->dev, "oled_%d", ++oled_num); |
479 |
NULL,"oled_%d", ++oled_num); |
| 480 |
|
480 |
|
| 481 |
if (IS_ERR(odev->class_dev)) { |
481 |
if (IS_ERR(odev->dev)) { |
| 482 |
retval = PTR_ERR(odev->class_dev); |
482 |
retval = PTR_ERR(odev->dev); |
| 483 |
goto err_files; |
483 |
goto err_files; |
| 484 |
} |
484 |
} |
| 485 |
|
485 |
|
| 486 |
class_set_devdata(odev->class_dev, odev); |
486 |
dev_set_drvdata(odev->dev, odev); |
| 487 |
|
487 |
|
| 488 |
if ( (retval = class_device_create_file(odev->class_dev, &class_device_attr_enabled))) { |
488 |
if ( (retval = device_create_file(odev->dev, &dev_attr_enabled))) { |
| 489 |
goto err_class_enabled; |
489 |
goto err_class_enabled; |
| 490 |
} |
490 |
} |
| 491 |
|
491 |
|
| 492 |
if ( (retval = class_device_create_file(odev->class_dev, &class_device_attr_picture))) { |
492 |
if ( (retval = device_create_file(odev->dev, &dev_attr_picture))) { |
| 493 |
goto err_class_picture; |
493 |
goto err_class_picture; |
| 494 |
} |
494 |
} |
| 495 |
|
495 |
|
|
Lines 501-511
Link Here
|
| 501 |
return 0; |
501 |
return 0; |
| 502 |
|
502 |
|
| 503 |
err_class_picture: |
503 |
err_class_picture: |
| 504 |
class_device_remove_file(odev->class_dev, &class_device_attr_picture); |
504 |
device_remove_file(odev->dev, &dev_attr_picture); |
| 505 |
|
505 |
|
| 506 |
err_class_enabled: |
506 |
err_class_enabled: |
| 507 |
class_device_remove_file(odev->class_dev, &class_device_attr_enabled); |
507 |
device_remove_file(odev->dev, &dev_attr_enabled); |
| 508 |
class_device_unregister(odev->class_dev); |
508 |
device_unregister(odev->dev); |
| 509 |
|
509 |
|
| 510 |
err_files: |
510 |
err_files: |
| 511 |
device_remove_file(&interface->dev, &ASUS_OLED_DEVICE_ATTR(enabled)); |
511 |
device_remove_file(&interface->dev, &ASUS_OLED_DEVICE_ATTR(enabled)); |
|
Lines 525-533
Link Here
|
| 525 |
odev = usb_get_intfdata (interface); |
525 |
odev = usb_get_intfdata (interface); |
| 526 |
usb_set_intfdata (interface, NULL); |
526 |
usb_set_intfdata (interface, NULL); |
| 527 |
|
527 |
|
| 528 |
class_device_remove_file(odev->class_dev, &class_device_attr_picture); |
528 |
device_remove_file(odev->dev, &dev_attr_picture); |
| 529 |
class_device_remove_file(odev->class_dev, &class_device_attr_enabled); |
529 |
device_remove_file(odev->dev, &dev_attr_enabled); |
| 530 |
class_device_unregister(odev->class_dev); |
530 |
device_unregister(odev->dev); |
| 531 |
|
531 |
|
| 532 |
device_remove_file(&interface->dev, & ASUS_OLED_DEVICE_ATTR(picture)); |
532 |
device_remove_file(&interface->dev, & ASUS_OLED_DEVICE_ATTR(picture)); |
| 533 |
device_remove_file(&interface->dev, & ASUS_OLED_DEVICE_ATTR(enabled)); |
533 |
device_remove_file(&interface->dev, & ASUS_OLED_DEVICE_ATTR(enabled)); |