linux/drivers/input/serio/serio.c
<<
>>
Prefs
   1/*
   2 *  The Serio abstraction module
   3 *
   4 *  Copyright (c) 1999-2004 Vojtech Pavlik
   5 *  Copyright (c) 2004 Dmitry Torokhov
   6 *  Copyright (c) 2003 Daniele Bellucci
   7 */
   8
   9/*
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License as published by
  12 * the Free Software Foundation; either version 2 of the License, or
  13 * (at your option) any later version.
  14 *
  15 * This program is distributed in the hope that it will be useful,
  16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18 * GNU General Public License for more details.
  19 *
  20 * You should have received a copy of the GNU General Public License
  21 * along with this program; if not, write to the Free Software
  22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  23 *
  24 * Should you need to contact me, the author, you can do so either by
  25 * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
  26 * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
  27 */
  28
  29#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  30
  31#include <linux/stddef.h>
  32#include <linux/module.h>
  33#include <linux/serio.h>
  34#include <linux/errno.h>
  35#include <linux/sched.h>
  36#include <linux/slab.h>
  37#include <linux/workqueue.h>
  38#include <linux/mutex.h>
  39
  40MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
  41MODULE_DESCRIPTION("Serio abstraction core");
  42MODULE_LICENSE("GPL");
  43
  44/*
  45 * serio_mutex protects entire serio subsystem and is taken every time
  46 * serio port or driver registered or unregistered.
  47 */
  48static DEFINE_MUTEX(serio_mutex);
  49
  50static LIST_HEAD(serio_list);
  51
  52static void serio_add_port(struct serio *serio);
  53static int serio_reconnect_port(struct serio *serio);
  54static void serio_disconnect_port(struct serio *serio);
  55static void serio_reconnect_subtree(struct serio *serio);
  56static void serio_attach_driver(struct serio_driver *drv);
  57
  58static int serio_connect_driver(struct serio *serio, struct serio_driver *drv)
  59{
  60        int retval;
  61
  62        mutex_lock(&serio->drv_mutex);
  63        retval = drv->connect(serio, drv);
  64        mutex_unlock(&serio->drv_mutex);
  65
  66        return retval;
  67}
  68
  69static int serio_reconnect_driver(struct serio *serio)
  70{
  71        int retval = -1;
  72
  73        mutex_lock(&serio->drv_mutex);
  74        if (serio->drv && serio->drv->reconnect)
  75                retval = serio->drv->reconnect(serio);
  76        mutex_unlock(&serio->drv_mutex);
  77
  78        return retval;
  79}
  80
  81static void serio_disconnect_driver(struct serio *serio)
  82{
  83        mutex_lock(&serio->drv_mutex);
  84        if (serio->drv)
  85                serio->drv->disconnect(serio);
  86        mutex_unlock(&serio->drv_mutex);
  87}
  88
  89static int serio_match_port(const struct serio_device_id *ids, struct serio *serio)
  90{
  91        while (ids->type || ids->proto) {
  92                if ((ids->type == SERIO_ANY || ids->type == serio->id.type) &&
  93                    (ids->proto == SERIO_ANY || ids->proto == serio->id.proto) &&
  94                    (ids->extra == SERIO_ANY || ids->extra == serio->id.extra) &&
  95                    (ids->id == SERIO_ANY || ids->id == serio->id.id))
  96                        return 1;
  97                ids++;
  98        }
  99        return 0;
 100}
 101
 102/*
 103 * Basic serio -> driver core mappings
 104 */
 105
 106static int serio_bind_driver(struct serio *serio, struct serio_driver *drv)
 107{
 108        int error;
 109
 110        if (serio_match_port(drv->id_table, serio)) {
 111
 112                serio->dev.driver = &drv->driver;
 113                if (serio_connect_driver(serio, drv)) {
 114                        serio->dev.driver = NULL;
 115                        return -ENODEV;
 116                }
 117
 118                error = device_bind_driver(&serio->dev);
 119                if (error) {
 120                        dev_warn(&serio->dev,
 121                                 "device_bind_driver() failed for %s (%s) and %s, error: %d\n",
 122                                 serio->phys, serio->name,
 123                                 drv->description, error);
 124                        serio_disconnect_driver(serio);
 125                        serio->dev.driver = NULL;
 126                        return error;
 127                }
 128        }
 129        return 0;
 130}
 131
 132static void serio_find_driver(struct serio *serio)
 133{
 134        int error;
 135
 136        error = device_attach(&serio->dev);
 137        if (error < 0 && error != -EPROBE_DEFER)
 138                dev_warn(&serio->dev,
 139                         "device_attach() failed for %s (%s), error: %d\n",
 140                         serio->phys, serio->name, error);
 141}
 142
 143
 144/*
 145 * Serio event processing.
 146 */
 147
 148enum serio_event_type {
 149        SERIO_RESCAN_PORT,
 150        SERIO_RECONNECT_PORT,
 151        SERIO_RECONNECT_SUBTREE,
 152        SERIO_REGISTER_PORT,
 153        SERIO_ATTACH_DRIVER,
 154};
 155
 156struct serio_event {
 157        enum serio_event_type type;
 158        void *object;
 159        struct module *owner;
 160        struct list_head node;
 161};
 162
 163static DEFINE_SPINLOCK(serio_event_lock);       /* protects serio_event_list */
 164static LIST_HEAD(serio_event_list);
 165
 166static struct serio_event *serio_get_event(void)
 167{
 168        struct serio_event *event = NULL;
 169        unsigned long flags;
 170
 171        spin_lock_irqsave(&serio_event_lock, flags);
 172
 173        if (!list_empty(&serio_event_list)) {
 174                event = list_first_entry(&serio_event_list,
 175                                         struct serio_event, node);
 176                list_del_init(&event->node);
 177        }
 178
 179        spin_unlock_irqrestore(&serio_event_lock, flags);
 180        return event;
 181}
 182
 183static void serio_free_event(struct serio_event *event)
 184{
 185        module_put(event->owner);
 186        kfree(event);
 187}
 188
 189static void serio_remove_duplicate_events(void *object,
 190                                          enum serio_event_type type)
 191{
 192        struct serio_event *e, *next;
 193        unsigned long flags;
 194
 195        spin_lock_irqsave(&serio_event_lock, flags);
 196
 197        list_for_each_entry_safe(e, next, &serio_event_list, node) {
 198                if (object == e->object) {
 199                        /*
 200                         * If this event is of different type we should not
 201                         * look further - we only suppress duplicate events
 202                         * that were sent back-to-back.
 203                         */
 204                        if (type != e->type)
 205                                break;
 206
 207                        list_del_init(&e->node);
 208                        serio_free_event(e);
 209                }
 210        }
 211
 212        spin_unlock_irqrestore(&serio_event_lock, flags);
 213}
 214
 215static void serio_handle_event(struct work_struct *work)
 216{
 217        struct serio_event *event;
 218
 219        mutex_lock(&serio_mutex);
 220
 221        while ((event = serio_get_event())) {
 222
 223                switch (event->type) {
 224
 225                case SERIO_REGISTER_PORT:
 226                        serio_add_port(event->object);
 227                        break;
 228
 229                case SERIO_RECONNECT_PORT:
 230                        serio_reconnect_port(event->object);
 231                        break;
 232
 233                case SERIO_RESCAN_PORT:
 234                        serio_disconnect_port(event->object);
 235                        serio_find_driver(event->object);
 236                        break;
 237
 238                case SERIO_RECONNECT_SUBTREE:
 239                        serio_reconnect_subtree(event->object);
 240                        break;
 241
 242                case SERIO_ATTACH_DRIVER:
 243                        serio_attach_driver(event->object);
 244                        break;
 245                }
 246
 247                serio_remove_duplicate_events(event->object, event->type);
 248                serio_free_event(event);
 249        }
 250
 251        mutex_unlock(&serio_mutex);
 252}
 253
 254static DECLARE_WORK(serio_event_work, serio_handle_event);
 255
 256static int serio_queue_event(void *object, struct module *owner,
 257                             enum serio_event_type event_type)
 258{
 259        unsigned long flags;
 260        struct serio_event *event;
 261        int retval = 0;
 262
 263        spin_lock_irqsave(&serio_event_lock, flags);
 264
 265        /*
 266         * Scan event list for the other events for the same serio port,
 267         * starting with the most recent one. If event is the same we
 268         * do not need add new one. If event is of different type we
 269         * need to add this event and should not look further because
 270         * we need to preseve sequence of distinct events.
 271         */
 272        list_for_each_entry_reverse(event, &serio_event_list, node) {
 273                if (event->object == object) {
 274                        if (event->type == event_type)
 275                                goto out;
 276                        break;
 277                }
 278        }
 279
 280        event = kmalloc(sizeof(struct serio_event), GFP_ATOMIC);
 281        if (!event) {
 282                pr_err("Not enough memory to queue event %d\n", event_type);
 283                retval = -ENOMEM;
 284                goto out;
 285        }
 286
 287        if (!try_module_get(owner)) {
 288                pr_warning("Can't get module reference, dropping event %d\n",
 289                           event_type);
 290                kfree(event);
 291                retval = -EINVAL;
 292                goto out;
 293        }
 294
 295        event->type = event_type;
 296        event->object = object;
 297        event->owner = owner;
 298
 299        list_add_tail(&event->node, &serio_event_list);
 300        queue_work(system_long_wq, &serio_event_work);
 301
 302out:
 303        spin_unlock_irqrestore(&serio_event_lock, flags);
 304        return retval;
 305}
 306
 307/*
 308 * Remove all events that have been submitted for a given
 309 * object, be it serio port or driver.
 310 */
 311static void serio_remove_pending_events(void *object)
 312{
 313        struct serio_event *event, *next;
 314        unsigned long flags;
 315
 316        spin_lock_irqsave(&serio_event_lock, flags);
 317
 318        list_for_each_entry_safe(event, next, &serio_event_list, node) {
 319                if (event->object == object) {
 320                        list_del_init(&event->node);
 321                        serio_free_event(event);
 322                }
 323        }
 324
 325        spin_unlock_irqrestore(&serio_event_lock, flags);
 326}
 327
 328/*
 329 * Locate child serio port (if any) that has not been fully registered yet.
 330 *
 331 * Children are registered by driver's connect() handler so there can't be a
 332 * grandchild pending registration together with a child.
 333 */
 334static struct serio *serio_get_pending_child(struct serio *parent)
 335{
 336        struct serio_event *event;
 337        struct serio *serio, *child = NULL;
 338        unsigned long flags;
 339
 340        spin_lock_irqsave(&serio_event_lock, flags);
 341
 342        list_for_each_entry(event, &serio_event_list, node) {
 343                if (event->type == SERIO_REGISTER_PORT) {
 344                        serio = event->object;
 345                        if (serio->parent == parent) {
 346                                child = serio;
 347                                break;
 348                        }
 349                }
 350        }
 351
 352        spin_unlock_irqrestore(&serio_event_lock, flags);
 353        return child;
 354}
 355
 356/*
 357 * Serio port operations
 358 */
 359
 360static ssize_t serio_show_description(struct device *dev, struct device_attribute *attr, char *buf)
 361{
 362        struct serio *serio = to_serio_port(dev);
 363        return sprintf(buf, "%s\n", serio->name);
 364}
 365
 366static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
 367{
 368        struct serio *serio = to_serio_port(dev);
 369
 370        return sprintf(buf, "serio:ty%02Xpr%02Xid%02Xex%02X\n",
 371                        serio->id.type, serio->id.proto, serio->id.id, serio->id.extra);
 372}
 373
 374static ssize_t type_show(struct device *dev, struct device_attribute *attr, char *buf)
 375{
 376        struct serio *serio = to_serio_port(dev);
 377        return sprintf(buf, "%02x\n", serio->id.type);
 378}
 379
 380static ssize_t proto_show(struct device *dev, struct device_attribute *attr, char *buf)
 381{
 382        struct serio *serio = to_serio_port(dev);
 383        return sprintf(buf, "%02x\n", serio->id.proto);
 384}
 385
 386static ssize_t id_show(struct device *dev, struct device_attribute *attr, char *buf)
 387{
 388        struct serio *serio = to_serio_port(dev);
 389        return sprintf(buf, "%02x\n", serio->id.id);
 390}
 391
 392static ssize_t extra_show(struct device *dev, struct device_attribute *attr, char *buf)
 393{
 394        struct serio *serio = to_serio_port(dev);
 395        return sprintf(buf, "%02x\n", serio->id.extra);
 396}
 397
 398static ssize_t drvctl_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 399{
 400        struct serio *serio = to_serio_port(dev);
 401        struct device_driver *drv;
 402        int error;
 403
 404        error = mutex_lock_interruptible(&serio_mutex);
 405        if (error)
 406                return error;
 407
 408        if (!strncmp(buf, "none", count)) {
 409                serio_disconnect_port(serio);
 410        } else if (!strncmp(buf, "reconnect", count)) {
 411                serio_reconnect_subtree(serio);
 412        } else if (!strncmp(buf, "rescan", count)) {
 413                serio_disconnect_port(serio);
 414                serio_find_driver(serio);
 415                serio_remove_duplicate_events(serio, SERIO_RESCAN_PORT);
 416        } else if ((drv = driver_find(buf, &serio_bus)) != NULL) {
 417                serio_disconnect_port(serio);
 418                error = serio_bind_driver(serio, to_serio_driver(drv));
 419                serio_remove_duplicate_events(serio, SERIO_RESCAN_PORT);
 420        } else {
 421                error = -EINVAL;
 422        }
 423
 424        mutex_unlock(&serio_mutex);
 425
 426        return error ? error : count;
 427}
 428
 429static ssize_t serio_show_bind_mode(struct device *dev, struct device_attribute *attr, char *buf)
 430{
 431        struct serio *serio = to_serio_port(dev);
 432        return sprintf(buf, "%s\n", serio->manual_bind ? "manual" : "auto");
 433}
 434
 435static ssize_t serio_set_bind_mode(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 436{
 437        struct serio *serio = to_serio_port(dev);
 438        int retval;
 439
 440        retval = count;
 441        if (!strncmp(buf, "manual", count)) {
 442                serio->manual_bind = true;
 443        } else if (!strncmp(buf, "auto", count)) {
 444                serio->manual_bind = false;
 445        } else {
 446                retval = -EINVAL;
 447        }
 448
 449        return retval;
 450}
 451
 452static ssize_t firmware_id_show(struct device *dev, struct device_attribute *attr, char *buf)
 453{
 454        struct serio *serio = to_serio_port(dev);
 455
 456        return sprintf(buf, "%s\n", serio->firmware_id);
 457}
 458
 459static DEVICE_ATTR_RO(type);
 460static DEVICE_ATTR_RO(proto);
 461static DEVICE_ATTR_RO(id);
 462static DEVICE_ATTR_RO(extra);
 463
 464static struct attribute *serio_device_id_attrs[] = {
 465        &dev_attr_type.attr,
 466        &dev_attr_proto.attr,
 467        &dev_attr_id.attr,
 468        &dev_attr_extra.attr,
 469        NULL
 470};
 471
 472static struct attribute_group serio_id_attr_group = {
 473        .name   = "id",
 474        .attrs  = serio_device_id_attrs,
 475};
 476
 477static DEVICE_ATTR_RO(modalias);
 478static DEVICE_ATTR_WO(drvctl);
 479static DEVICE_ATTR(description, S_IRUGO, serio_show_description, NULL);
 480static DEVICE_ATTR(bind_mode, S_IWUSR | S_IRUGO, serio_show_bind_mode, serio_set_bind_mode);
 481static DEVICE_ATTR_RO(firmware_id);
 482
 483static struct attribute *serio_device_attrs[] = {
 484        &dev_attr_modalias.attr,
 485        &dev_attr_description.attr,
 486        &dev_attr_drvctl.attr,
 487        &dev_attr_bind_mode.attr,
 488        &dev_attr_firmware_id.attr,
 489        NULL
 490};
 491
 492static struct attribute_group serio_device_attr_group = {
 493        .attrs  = serio_device_attrs,
 494};
 495
 496static const struct attribute_group *serio_device_attr_groups[] = {
 497        &serio_id_attr_group,
 498        &serio_device_attr_group,
 499        NULL
 500};
 501
 502static void serio_release_port(struct device *dev)
 503{
 504        struct serio *serio = to_serio_port(dev);
 505
 506        kfree(serio);
 507        module_put(THIS_MODULE);
 508}
 509
 510/*
 511 * Prepare serio port for registration.
 512 */
 513static void serio_init_port(struct serio *serio)
 514{
 515        static atomic_t serio_no = ATOMIC_INIT(-1);
 516
 517        __module_get(THIS_MODULE);
 518
 519        INIT_LIST_HEAD(&serio->node);
 520        INIT_LIST_HEAD(&serio->child_node);
 521        INIT_LIST_HEAD(&serio->children);
 522        spin_lock_init(&serio->lock);
 523        mutex_init(&serio->drv_mutex);
 524        device_initialize(&serio->dev);
 525        dev_set_name(&serio->dev, "serio%lu",
 526                     (unsigned long)atomic_inc_return(&serio_no));
 527        serio->dev.bus = &serio_bus;
 528        serio->dev.release = serio_release_port;
 529        serio->dev.groups = serio_device_attr_groups;
 530        if (serio->parent) {
 531                serio->dev.parent = &serio->parent->dev;
 532                serio->depth = serio->parent->depth + 1;
 533        } else
 534                serio->depth = 0;
 535        lockdep_set_subclass(&serio->lock, serio->depth);
 536}
 537
 538/*
 539 * Complete serio port registration.
 540 * Driver core will attempt to find appropriate driver for the port.
 541 */
 542static void serio_add_port(struct serio *serio)
 543{
 544        struct serio *parent = serio->parent;
 545        int error;
 546
 547        if (parent) {
 548                serio_pause_rx(parent);
 549                list_add_tail(&serio->child_node, &parent->children);
 550                serio_continue_rx(parent);
 551        }
 552
 553        list_add_tail(&serio->node, &serio_list);
 554
 555        if (serio->start)
 556                serio->start(serio);
 557
 558        error = device_add(&serio->dev);
 559        if (error)
 560                dev_err(&serio->dev,
 561                        "device_add() failed for %s (%s), error: %d\n",
 562                        serio->phys, serio->name, error);
 563}
 564
 565/*
 566 * serio_destroy_port() completes unregistration process and removes
 567 * port from the system
 568 */
 569static void serio_destroy_port(struct serio *serio)
 570{
 571        struct serio *child;
 572
 573        while ((child = serio_get_pending_child(serio)) != NULL) {
 574                serio_remove_pending_events(child);
 575                put_device(&child->dev);
 576        }
 577
 578        if (serio->stop)
 579                serio->stop(serio);
 580
 581        if (serio->parent) {
 582                serio_pause_rx(serio->parent);
 583                list_del_init(&serio->child_node);
 584                serio_continue_rx(serio->parent);
 585                serio->parent = NULL;
 586        }
 587
 588        if (device_is_registered(&serio->dev))
 589                device_del(&serio->dev);
 590
 591        list_del_init(&serio->node);
 592        serio_remove_pending_events(serio);
 593        put_device(&serio->dev);
 594}
 595
 596/*
 597 * Reconnect serio port (re-initialize attached device).
 598 * If reconnect fails (old device is no longer attached or
 599 * there was no device to begin with) we do full rescan in
 600 * hope of finding a driver for the port.
 601 */
 602static int serio_reconnect_port(struct serio *serio)
 603{
 604        int error = serio_reconnect_driver(serio);
 605
 606        if (error) {
 607                serio_disconnect_port(serio);
 608                serio_find_driver(serio);
 609        }
 610
 611        return error;
 612}
 613
 614/*
 615 * Reconnect serio port and all its children (re-initialize attached
 616 * devices).
 617 */
 618static void serio_reconnect_subtree(struct serio *root)
 619{
 620        struct serio *s = root;
 621        int error;
 622
 623        do {
 624                error = serio_reconnect_port(s);
 625                if (!error) {
 626                        /*
 627                         * Reconnect was successful, move on to do the
 628                         * first child.
 629                         */
 630                        if (!list_empty(&s->children)) {
 631                                s = list_first_entry(&s->children,
 632                                                     struct serio, child_node);
 633                                continue;
 634                        }
 635                }
 636
 637                /*
 638                 * Either it was a leaf node or reconnect failed and it
 639                 * became a leaf node. Continue reconnecting starting with
 640                 * the next sibling of the parent node.
 641                 */
 642                while (s != root) {
 643                        struct serio *parent = s->parent;
 644
 645                        if (!list_is_last(&s->child_node, &parent->children)) {
 646                                s = list_entry(s->child_node.next,
 647                                               struct serio, child_node);
 648                                break;
 649                        }
 650
 651                        s = parent;
 652                }
 653        } while (s != root);
 654}
 655
 656/*
 657 * serio_disconnect_port() unbinds a port from its driver. As a side effect
 658 * all children ports are unbound and destroyed.
 659 */
 660static void serio_disconnect_port(struct serio *serio)
 661{
 662        struct serio *s = serio;
 663
 664        /*
 665         * Children ports should be disconnected and destroyed
 666         * first; we travel the tree in depth-first order.
 667         */
 668        while (!list_empty(&serio->children)) {
 669
 670                /* Locate a leaf */
 671                while (!list_empty(&s->children))
 672                        s = list_first_entry(&s->children,
 673                                             struct serio, child_node);
 674
 675                /*
 676                 * Prune this leaf node unless it is the one we
 677                 * started with.
 678                 */
 679                if (s != serio) {
 680                        struct serio *parent = s->parent;
 681
 682                        device_release_driver(&s->dev);
 683                        serio_destroy_port(s);
 684
 685                        s = parent;
 686                }
 687        }
 688
 689        /*
 690         * OK, no children left, now disconnect this port.
 691         */
 692        device_release_driver(&serio->dev);
 693}
 694
 695void serio_rescan(struct serio *serio)
 696{
 697        serio_queue_event(serio, NULL, SERIO_RESCAN_PORT);
 698}
 699EXPORT_SYMBOL(serio_rescan);
 700
 701void serio_reconnect(struct serio *serio)
 702{
 703        serio_queue_event(serio, NULL, SERIO_RECONNECT_SUBTREE);
 704}
 705EXPORT_SYMBOL(serio_reconnect);
 706
 707/*
 708 * Submits register request to kseriod for subsequent execution.
 709 * Note that port registration is always asynchronous.
 710 */
 711void __serio_register_port(struct serio *serio, struct module *owner)
 712{
 713        serio_init_port(serio);
 714        serio_queue_event(serio, owner, SERIO_REGISTER_PORT);
 715}
 716EXPORT_SYMBOL(__serio_register_port);
 717
 718/*
 719 * Synchronously unregisters serio port.
 720 */
 721void serio_unregister_port(struct serio *serio)
 722{
 723        mutex_lock(&serio_mutex);
 724        serio_disconnect_port(serio);
 725        serio_destroy_port(serio);
 726        mutex_unlock(&serio_mutex);
 727}
 728EXPORT_SYMBOL(serio_unregister_port);
 729
 730/*
 731 * Safely unregisters children ports if they are present.
 732 */
 733void serio_unregister_child_port(struct serio *serio)
 734{
 735        struct serio *s, *next;
 736
 737        mutex_lock(&serio_mutex);
 738        list_for_each_entry_safe(s, next, &serio->children, child_node) {
 739                serio_disconnect_port(s);
 740                serio_destroy_port(s);
 741        }
 742        mutex_unlock(&serio_mutex);
 743}
 744EXPORT_SYMBOL(serio_unregister_child_port);
 745
 746
 747/*
 748 * Serio driver operations
 749 */
 750
 751static ssize_t description_show(struct device_driver *drv, char *buf)
 752{
 753        struct serio_driver *driver = to_serio_driver(drv);
 754        return sprintf(buf, "%s\n", driver->description ? driver->description : "(none)");
 755}
 756static DRIVER_ATTR_RO(description);
 757
 758static ssize_t bind_mode_show(struct device_driver *drv, char *buf)
 759{
 760        struct serio_driver *serio_drv = to_serio_driver(drv);
 761        return sprintf(buf, "%s\n", serio_drv->manual_bind ? "manual" : "auto");
 762}
 763
 764static ssize_t bind_mode_store(struct device_driver *drv, const char *buf, size_t count)
 765{
 766        struct serio_driver *serio_drv = to_serio_driver(drv);
 767        int retval;
 768
 769        retval = count;
 770        if (!strncmp(buf, "manual", count)) {
 771                serio_drv->manual_bind = true;
 772        } else if (!strncmp(buf, "auto", count)) {
 773                serio_drv->manual_bind = false;
 774        } else {
 775                retval = -EINVAL;
 776        }
 777
 778        return retval;
 779}
 780static DRIVER_ATTR_RW(bind_mode);
 781
 782static struct attribute *serio_driver_attrs[] = {
 783        &driver_attr_description.attr,
 784        &driver_attr_bind_mode.attr,
 785        NULL,
 786};
 787ATTRIBUTE_GROUPS(serio_driver);
 788
 789static int serio_driver_probe(struct device *dev)
 790{
 791        struct serio *serio = to_serio_port(dev);
 792        struct serio_driver *drv = to_serio_driver(dev->driver);
 793
 794        return serio_connect_driver(serio, drv);
 795}
 796
 797static int serio_driver_remove(struct device *dev)
 798{
 799        struct serio *serio = to_serio_port(dev);
 800
 801        serio_disconnect_driver(serio);
 802        return 0;
 803}
 804
 805static void serio_cleanup(struct serio *serio)
 806{
 807        mutex_lock(&serio->drv_mutex);
 808        if (serio->drv && serio->drv->cleanup)
 809                serio->drv->cleanup(serio);
 810        mutex_unlock(&serio->drv_mutex);
 811}
 812
 813static void serio_shutdown(struct device *dev)
 814{
 815        struct serio *serio = to_serio_port(dev);
 816
 817        serio_cleanup(serio);
 818}
 819
 820static void serio_attach_driver(struct serio_driver *drv)
 821{
 822        int error;
 823
 824        error = driver_attach(&drv->driver);
 825        if (error)
 826                pr_warning("driver_attach() failed for %s with error %d\n",
 827                           drv->driver.name, error);
 828}
 829
 830int __serio_register_driver(struct serio_driver *drv, struct module *owner, const char *mod_name)
 831{
 832        bool manual_bind = drv->manual_bind;
 833        int error;
 834
 835        drv->driver.bus = &serio_bus;
 836        drv->driver.owner = owner;
 837        drv->driver.mod_name = mod_name;
 838
 839        /*
 840         * Temporarily disable automatic binding because probing
 841         * takes long time and we are better off doing it in kseriod
 842         */
 843        drv->manual_bind = true;
 844
 845        error = driver_register(&drv->driver);
 846        if (error) {
 847                pr_err("driver_register() failed for %s, error: %d\n",
 848                        drv->driver.name, error);
 849                return error;
 850        }
 851
 852        /*
 853         * Restore original bind mode and let kseriod bind the
 854         * driver to free ports
 855         */
 856        if (!manual_bind) {
 857                drv->manual_bind = false;
 858                error = serio_queue_event(drv, NULL, SERIO_ATTACH_DRIVER);
 859                if (error) {
 860                        driver_unregister(&drv->driver);
 861                        return error;
 862                }
 863        }
 864
 865        return 0;
 866}
 867EXPORT_SYMBOL(__serio_register_driver);
 868
 869void serio_unregister_driver(struct serio_driver *drv)
 870{
 871        struct serio *serio;
 872
 873        mutex_lock(&serio_mutex);
 874
 875        drv->manual_bind = true;        /* so serio_find_driver ignores it */
 876        serio_remove_pending_events(drv);
 877
 878start_over:
 879        list_for_each_entry(serio, &serio_list, node) {
 880                if (serio->drv == drv) {
 881                        serio_disconnect_port(serio);
 882                        serio_find_driver(serio);
 883                        /* we could've deleted some ports, restart */
 884                        goto start_over;
 885                }
 886        }
 887
 888        driver_unregister(&drv->driver);
 889        mutex_unlock(&serio_mutex);
 890}
 891EXPORT_SYMBOL(serio_unregister_driver);
 892
 893static void serio_set_drv(struct serio *serio, struct serio_driver *drv)
 894{
 895        serio_pause_rx(serio);
 896        serio->drv = drv;
 897        serio_continue_rx(serio);
 898}
 899
 900static int serio_bus_match(struct device *dev, struct device_driver *drv)
 901{
 902        struct serio *serio = to_serio_port(dev);
 903        struct serio_driver *serio_drv = to_serio_driver(drv);
 904
 905        if (serio->manual_bind || serio_drv->manual_bind)
 906                return 0;
 907
 908        return serio_match_port(serio_drv->id_table, serio);
 909}
 910
 911#define SERIO_ADD_UEVENT_VAR(fmt, val...)                               \
 912        do {                                                            \
 913                int err = add_uevent_var(env, fmt, val);                \
 914                if (err)                                                \
 915                        return err;                                     \
 916        } while (0)
 917
 918static int serio_uevent(struct device *dev, struct kobj_uevent_env *env)
 919{
 920        struct serio *serio;
 921
 922        if (!dev)
 923                return -ENODEV;
 924
 925        serio = to_serio_port(dev);
 926
 927        SERIO_ADD_UEVENT_VAR("SERIO_TYPE=%02x", serio->id.type);
 928        SERIO_ADD_UEVENT_VAR("SERIO_PROTO=%02x", serio->id.proto);
 929        SERIO_ADD_UEVENT_VAR("SERIO_ID=%02x", serio->id.id);
 930        SERIO_ADD_UEVENT_VAR("SERIO_EXTRA=%02x", serio->id.extra);
 931
 932        SERIO_ADD_UEVENT_VAR("MODALIAS=serio:ty%02Xpr%02Xid%02Xex%02X",
 933                                serio->id.type, serio->id.proto, serio->id.id, serio->id.extra);
 934
 935        if (serio->firmware_id[0])
 936                SERIO_ADD_UEVENT_VAR("SERIO_FIRMWARE_ID=%s",
 937                                     serio->firmware_id);
 938
 939        return 0;
 940}
 941#undef SERIO_ADD_UEVENT_VAR
 942
 943#ifdef CONFIG_PM
 944static int serio_suspend(struct device *dev)
 945{
 946        struct serio *serio = to_serio_port(dev);
 947
 948        serio_cleanup(serio);
 949
 950        return 0;
 951}
 952
 953static int serio_resume(struct device *dev)
 954{
 955        struct serio *serio = to_serio_port(dev);
 956
 957        /*
 958         * Driver reconnect can take a while, so better let kseriod
 959         * deal with it.
 960         */
 961        serio_queue_event(serio, NULL, SERIO_RECONNECT_PORT);
 962
 963        return 0;
 964}
 965
 966static const struct dev_pm_ops serio_pm_ops = {
 967        .suspend        = serio_suspend,
 968        .resume         = serio_resume,
 969        .poweroff       = serio_suspend,
 970        .restore        = serio_resume,
 971};
 972#endif /* CONFIG_PM */
 973
 974/* called from serio_driver->connect/disconnect methods under serio_mutex */
 975int serio_open(struct serio *serio, struct serio_driver *drv)
 976{
 977        serio_set_drv(serio, drv);
 978
 979        if (serio->open && serio->open(serio)) {
 980                serio_set_drv(serio, NULL);
 981                return -1;
 982        }
 983        return 0;
 984}
 985EXPORT_SYMBOL(serio_open);
 986
 987/* called from serio_driver->connect/disconnect methods under serio_mutex */
 988void serio_close(struct serio *serio)
 989{
 990        if (serio->close)
 991                serio->close(serio);
 992
 993        serio_set_drv(serio, NULL);
 994}
 995EXPORT_SYMBOL(serio_close);
 996
 997irqreturn_t serio_interrupt(struct serio *serio,
 998                unsigned char data, unsigned int dfl)
 999{
1000        unsigned long flags;
1001        irqreturn_t ret = IRQ_NONE;
1002
1003        spin_lock_irqsave(&serio->lock, flags);
1004
1005        if (likely(serio->drv)) {
1006                ret = serio->drv->interrupt(serio, data, dfl);
1007        } else if (!dfl && device_is_registered(&serio->dev)) {
1008                serio_rescan(serio);
1009                ret = IRQ_HANDLED;
1010        }
1011
1012        spin_unlock_irqrestore(&serio->lock, flags);
1013
1014        return ret;
1015}
1016EXPORT_SYMBOL(serio_interrupt);
1017
1018struct bus_type serio_bus = {
1019        .name           = "serio",
1020        .drv_groups     = serio_driver_groups,
1021        .match          = serio_bus_match,
1022        .uevent         = serio_uevent,
1023        .probe          = serio_driver_probe,
1024        .remove         = serio_driver_remove,
1025        .shutdown       = serio_shutdown,
1026#ifdef CONFIG_PM
1027        .pm             = &serio_pm_ops,
1028#endif
1029};
1030EXPORT_SYMBOL(serio_bus);
1031
1032static int __init serio_init(void)
1033{
1034        int error;
1035
1036        error = bus_register(&serio_bus);
1037        if (error) {
1038                pr_err("Failed to register serio bus, error: %d\n", error);
1039                return error;
1040        }
1041
1042        return 0;
1043}
1044
1045static void __exit serio_exit(void)
1046{
1047        bus_unregister(&serio_bus);
1048
1049        /*
1050         * There should not be any outstanding events but work may
1051         * still be scheduled so simply cancel it.
1052         */
1053        cancel_work_sync(&serio_event_work);
1054}
1055
1056subsys_initcall(serio_init);
1057module_exit(serio_exit);
1058