linux/drivers/i2c/i2c-core.c
<<
>>
Prefs
   1/* i2c-core.c - a device driver for the iic-bus interface                    */
   2/* ------------------------------------------------------------------------- */
   3/*   Copyright (C) 1995-99 Simon G. Vogl
   4
   5    This program is free software; you can redistribute it and/or modify
   6    it under the terms of the GNU General Public License as published by
   7    the Free Software Foundation; either version 2 of the License, or
   8    (at your option) any later version.
   9
  10    This program is distributed in the hope that it will be useful,
  11    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13    GNU General Public License for more details.
  14
  15    You should have received a copy of the GNU General Public License
  16    along with this program; if not, write to the Free Software
  17    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  18    MA 02110-1301 USA.                                                       */
  19/* ------------------------------------------------------------------------- */
  20
  21/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>.
  22   All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
  23   SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and
  24   Jean Delvare <khali@linux-fr.org>
  25   Mux support by Rodolfo Giometti <giometti@enneenne.com> and
  26   Michael Lawnick <michael.lawnick.ext@nsn.com> */
  27
  28#include <linux/module.h>
  29#include <linux/kernel.h>
  30#include <linux/errno.h>
  31#include <linux/slab.h>
  32#include <linux/i2c.h>
  33#include <linux/init.h>
  34#include <linux/idr.h>
  35#include <linux/mutex.h>
  36#include <linux/of_device.h>
  37#include <linux/completion.h>
  38#include <linux/hardirq.h>
  39#include <linux/irqflags.h>
  40#include <linux/rwsem.h>
  41#include <linux/pm_runtime.h>
  42#include <asm/uaccess.h>
  43
  44#include "i2c-core.h"
  45
  46
  47/* core_lock protects i2c_adapter_idr, and guarantees
  48   that device detection, deletion of detected devices, and attach_adapter
  49   and detach_adapter calls are serialized */
  50static DEFINE_MUTEX(core_lock);
  51static DEFINE_IDR(i2c_adapter_idr);
  52
  53static struct device_type i2c_client_type;
  54static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver);
  55
  56/* ------------------------------------------------------------------------- */
  57
  58static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
  59                                                const struct i2c_client *client)
  60{
  61        while (id->name[0]) {
  62                if (strcmp(client->name, id->name) == 0)
  63                        return id;
  64                id++;
  65        }
  66        return NULL;
  67}
  68
  69static int i2c_device_match(struct device *dev, struct device_driver *drv)
  70{
  71        struct i2c_client       *client = i2c_verify_client(dev);
  72        struct i2c_driver       *driver;
  73
  74        if (!client)
  75                return 0;
  76
  77        /* Attempt an OF style match */
  78        if (of_driver_match_device(dev, drv))
  79                return 1;
  80
  81        driver = to_i2c_driver(drv);
  82        /* match on an id table if there is one */
  83        if (driver->id_table)
  84                return i2c_match_id(driver->id_table, client) != NULL;
  85
  86        return 0;
  87}
  88
  89#ifdef  CONFIG_HOTPLUG
  90
  91/* uevent helps with hotplug: modprobe -q $(MODALIAS) */
  92static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
  93{
  94        struct i2c_client       *client = to_i2c_client(dev);
  95
  96        if (add_uevent_var(env, "MODALIAS=%s%s",
  97                           I2C_MODULE_PREFIX, client->name))
  98                return -ENOMEM;
  99        dev_dbg(dev, "uevent\n");
 100        return 0;
 101}
 102
 103#else
 104#define i2c_device_uevent       NULL
 105#endif  /* CONFIG_HOTPLUG */
 106
 107static int i2c_device_probe(struct device *dev)
 108{
 109        struct i2c_client       *client = i2c_verify_client(dev);
 110        struct i2c_driver       *driver;
 111        int status;
 112
 113        if (!client)
 114                return 0;
 115
 116        driver = to_i2c_driver(dev->driver);
 117        if (!driver->probe || !driver->id_table)
 118                return -ENODEV;
 119        client->driver = driver;
 120        if (!device_can_wakeup(&client->dev))
 121                device_init_wakeup(&client->dev,
 122                                        client->flags & I2C_CLIENT_WAKE);
 123        dev_dbg(dev, "probe\n");
 124
 125        status = driver->probe(client, i2c_match_id(driver->id_table, client));
 126        if (status) {
 127                client->driver = NULL;
 128                i2c_set_clientdata(client, NULL);
 129        }
 130        return status;
 131}
 132
 133static int i2c_device_remove(struct device *dev)
 134{
 135        struct i2c_client       *client = i2c_verify_client(dev);
 136        struct i2c_driver       *driver;
 137        int                     status;
 138
 139        if (!client || !dev->driver)
 140                return 0;
 141
 142        driver = to_i2c_driver(dev->driver);
 143        if (driver->remove) {
 144                dev_dbg(dev, "remove\n");
 145                status = driver->remove(client);
 146        } else {
 147                dev->driver = NULL;
 148                status = 0;
 149        }
 150        if (status == 0) {
 151                client->driver = NULL;
 152                i2c_set_clientdata(client, NULL);
 153        }
 154        return status;
 155}
 156
 157static void i2c_device_shutdown(struct device *dev)
 158{
 159        struct i2c_client *client = i2c_verify_client(dev);
 160        struct i2c_driver *driver;
 161
 162        if (!client || !dev->driver)
 163                return;
 164        driver = to_i2c_driver(dev->driver);
 165        if (driver->shutdown)
 166                driver->shutdown(client);
 167}
 168
 169#ifdef CONFIG_PM_SLEEP
 170static int i2c_legacy_suspend(struct device *dev, pm_message_t mesg)
 171{
 172        struct i2c_client *client = i2c_verify_client(dev);
 173        struct i2c_driver *driver;
 174
 175        if (!client || !dev->driver)
 176                return 0;
 177        driver = to_i2c_driver(dev->driver);
 178        if (!driver->suspend)
 179                return 0;
 180        return driver->suspend(client, mesg);
 181}
 182
 183static int i2c_legacy_resume(struct device *dev)
 184{
 185        struct i2c_client *client = i2c_verify_client(dev);
 186        struct i2c_driver *driver;
 187
 188        if (!client || !dev->driver)
 189                return 0;
 190        driver = to_i2c_driver(dev->driver);
 191        if (!driver->resume)
 192                return 0;
 193        return driver->resume(client);
 194}
 195
 196static int i2c_device_pm_suspend(struct device *dev)
 197{
 198        const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 199
 200        if (pm)
 201                return pm_generic_suspend(dev);
 202        else
 203                return i2c_legacy_suspend(dev, PMSG_SUSPEND);
 204}
 205
 206static int i2c_device_pm_resume(struct device *dev)
 207{
 208        const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 209
 210        if (pm)
 211                return pm_generic_resume(dev);
 212        else
 213                return i2c_legacy_resume(dev);
 214}
 215
 216static int i2c_device_pm_freeze(struct device *dev)
 217{
 218        const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 219
 220        if (pm)
 221                return pm_generic_freeze(dev);
 222        else
 223                return i2c_legacy_suspend(dev, PMSG_FREEZE);
 224}
 225
 226static int i2c_device_pm_thaw(struct device *dev)
 227{
 228        const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 229
 230        if (pm)
 231                return pm_generic_thaw(dev);
 232        else
 233                return i2c_legacy_resume(dev);
 234}
 235
 236static int i2c_device_pm_poweroff(struct device *dev)
 237{
 238        const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 239
 240        if (pm)
 241                return pm_generic_poweroff(dev);
 242        else
 243                return i2c_legacy_suspend(dev, PMSG_HIBERNATE);
 244}
 245
 246static int i2c_device_pm_restore(struct device *dev)
 247{
 248        const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 249
 250        if (pm)
 251                return pm_generic_restore(dev);
 252        else
 253                return i2c_legacy_resume(dev);
 254}
 255#else /* !CONFIG_PM_SLEEP */
 256#define i2c_device_pm_suspend   NULL
 257#define i2c_device_pm_resume    NULL
 258#define i2c_device_pm_freeze    NULL
 259#define i2c_device_pm_thaw      NULL
 260#define i2c_device_pm_poweroff  NULL
 261#define i2c_device_pm_restore   NULL
 262#endif /* !CONFIG_PM_SLEEP */
 263
 264static void i2c_client_dev_release(struct device *dev)
 265{
 266        kfree(to_i2c_client(dev));
 267}
 268
 269static ssize_t
 270show_name(struct device *dev, struct device_attribute *attr, char *buf)
 271{
 272        return sprintf(buf, "%s\n", dev->type == &i2c_client_type ?
 273                       to_i2c_client(dev)->name : to_i2c_adapter(dev)->name);
 274}
 275
 276static ssize_t
 277show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
 278{
 279        struct i2c_client *client = to_i2c_client(dev);
 280        return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
 281}
 282
 283static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
 284static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
 285
 286static struct attribute *i2c_dev_attrs[] = {
 287        &dev_attr_name.attr,
 288        /* modalias helps coldplug:  modprobe $(cat .../modalias) */
 289        &dev_attr_modalias.attr,
 290        NULL
 291};
 292
 293static struct attribute_group i2c_dev_attr_group = {
 294        .attrs          = i2c_dev_attrs,
 295};
 296
 297static const struct attribute_group *i2c_dev_attr_groups[] = {
 298        &i2c_dev_attr_group,
 299        NULL
 300};
 301
 302static const struct dev_pm_ops i2c_device_pm_ops = {
 303        .suspend = i2c_device_pm_suspend,
 304        .resume = i2c_device_pm_resume,
 305        .freeze = i2c_device_pm_freeze,
 306        .thaw = i2c_device_pm_thaw,
 307        .poweroff = i2c_device_pm_poweroff,
 308        .restore = i2c_device_pm_restore,
 309        SET_RUNTIME_PM_OPS(
 310                pm_generic_runtime_suspend,
 311                pm_generic_runtime_resume,
 312                pm_generic_runtime_idle
 313        )
 314};
 315
 316struct bus_type i2c_bus_type = {
 317        .name           = "i2c",
 318        .match          = i2c_device_match,
 319        .probe          = i2c_device_probe,
 320        .remove         = i2c_device_remove,
 321        .shutdown       = i2c_device_shutdown,
 322        .pm             = &i2c_device_pm_ops,
 323};
 324EXPORT_SYMBOL_GPL(i2c_bus_type);
 325
 326static struct device_type i2c_client_type = {
 327        .groups         = i2c_dev_attr_groups,
 328        .uevent         = i2c_device_uevent,
 329        .release        = i2c_client_dev_release,
 330};
 331
 332
 333/**
 334 * i2c_verify_client - return parameter as i2c_client, or NULL
 335 * @dev: device, probably from some driver model iterator
 336 *
 337 * When traversing the driver model tree, perhaps using driver model
 338 * iterators like @device_for_each_child(), you can't assume very much
 339 * about the nodes you find.  Use this function to avoid oopses caused
 340 * by wrongly treating some non-I2C device as an i2c_client.
 341 */
 342struct i2c_client *i2c_verify_client(struct device *dev)
 343{
 344        return (dev->type == &i2c_client_type)
 345                        ? to_i2c_client(dev)
 346                        : NULL;
 347}
 348EXPORT_SYMBOL(i2c_verify_client);
 349
 350
 351/* This is a permissive address validity check, I2C address map constraints
 352 * are purposely not enforced, except for the general call address. */
 353static int i2c_check_client_addr_validity(const struct i2c_client *client)
 354{
 355        if (client->flags & I2C_CLIENT_TEN) {
 356                /* 10-bit address, all values are valid */
 357                if (client->addr > 0x3ff)
 358                        return -EINVAL;
 359        } else {
 360                /* 7-bit address, reject the general call address */
 361                if (client->addr == 0x00 || client->addr > 0x7f)
 362                        return -EINVAL;
 363        }
 364        return 0;
 365}
 366
 367/* And this is a strict address validity check, used when probing. If a
 368 * device uses a reserved address, then it shouldn't be probed. 7-bit
 369 * addressing is assumed, 10-bit address devices are rare and should be
 370 * explicitly enumerated. */
 371static int i2c_check_addr_validity(unsigned short addr)
 372{
 373        /*
 374         * Reserved addresses per I2C specification:
 375         *  0x00       General call address / START byte
 376         *  0x01       CBUS address
 377         *  0x02       Reserved for different bus format
 378         *  0x03       Reserved for future purposes
 379         *  0x04-0x07  Hs-mode master code
 380         *  0x78-0x7b  10-bit slave addressing
 381         *  0x7c-0x7f  Reserved for future purposes
 382         */
 383        if (addr < 0x08 || addr > 0x77)
 384                return -EINVAL;
 385        return 0;
 386}
 387
 388static int __i2c_check_addr_busy(struct device *dev, void *addrp)
 389{
 390        struct i2c_client       *client = i2c_verify_client(dev);
 391        int                     addr = *(int *)addrp;
 392
 393        if (client && client->addr == addr)
 394                return -EBUSY;
 395        return 0;
 396}
 397
 398/* walk up mux tree */
 399static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
 400{
 401        struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
 402        int result;
 403
 404        result = device_for_each_child(&adapter->dev, &addr,
 405                                        __i2c_check_addr_busy);
 406
 407        if (!result && parent)
 408                result = i2c_check_mux_parents(parent, addr);
 409
 410        return result;
 411}
 412
 413/* recurse down mux tree */
 414static int i2c_check_mux_children(struct device *dev, void *addrp)
 415{
 416        int result;
 417
 418        if (dev->type == &i2c_adapter_type)
 419                result = device_for_each_child(dev, addrp,
 420                                                i2c_check_mux_children);
 421        else
 422                result = __i2c_check_addr_busy(dev, addrp);
 423
 424        return result;
 425}
 426
 427static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
 428{
 429        struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
 430        int result = 0;
 431
 432        if (parent)
 433                result = i2c_check_mux_parents(parent, addr);
 434
 435        if (!result)
 436                result = device_for_each_child(&adapter->dev, &addr,
 437                                                i2c_check_mux_children);
 438
 439        return result;
 440}
 441
 442/**
 443 * i2c_lock_adapter - Get exclusive access to an I2C bus segment
 444 * @adapter: Target I2C bus segment
 445 */
 446void i2c_lock_adapter(struct i2c_adapter *adapter)
 447{
 448        struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
 449
 450        if (parent)
 451                i2c_lock_adapter(parent);
 452        else
 453                rt_mutex_lock(&adapter->bus_lock);
 454}
 455EXPORT_SYMBOL_GPL(i2c_lock_adapter);
 456
 457/**
 458 * i2c_trylock_adapter - Try to get exclusive access to an I2C bus segment
 459 * @adapter: Target I2C bus segment
 460 */
 461static int i2c_trylock_adapter(struct i2c_adapter *adapter)
 462{
 463        struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
 464
 465        if (parent)
 466                return i2c_trylock_adapter(parent);
 467        else
 468                return rt_mutex_trylock(&adapter->bus_lock);
 469}
 470
 471/**
 472 * i2c_unlock_adapter - Release exclusive access to an I2C bus segment
 473 * @adapter: Target I2C bus segment
 474 */
 475void i2c_unlock_adapter(struct i2c_adapter *adapter)
 476{
 477        struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
 478
 479        if (parent)
 480                i2c_unlock_adapter(parent);
 481        else
 482                rt_mutex_unlock(&adapter->bus_lock);
 483}
 484EXPORT_SYMBOL_GPL(i2c_unlock_adapter);
 485
 486/**
 487 * i2c_new_device - instantiate an i2c device
 488 * @adap: the adapter managing the device
 489 * @info: describes one I2C device; bus_num is ignored
 490 * Context: can sleep
 491 *
 492 * Create an i2c device. Binding is handled through driver model
 493 * probe()/remove() methods.  A driver may be bound to this device when we
 494 * return from this function, or any later moment (e.g. maybe hotplugging will
 495 * load the driver module).  This call is not appropriate for use by mainboard
 496 * initialization logic, which usually runs during an arch_initcall() long
 497 * before any i2c_adapter could exist.
 498 *
 499 * This returns the new i2c client, which may be saved for later use with
 500 * i2c_unregister_device(); or NULL to indicate an error.
 501 */
 502struct i2c_client *
 503i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
 504{
 505        struct i2c_client       *client;
 506        int                     status;
 507
 508        client = kzalloc(sizeof *client, GFP_KERNEL);
 509        if (!client)
 510                return NULL;
 511
 512        client->adapter = adap;
 513
 514        client->dev.platform_data = info->platform_data;
 515
 516        if (info->archdata)
 517                client->dev.archdata = *info->archdata;
 518
 519        client->flags = info->flags;
 520        client->addr = info->addr;
 521        client->irq = info->irq;
 522
 523        strlcpy(client->name, info->type, sizeof(client->name));
 524
 525        /* Check for address validity */
 526        status = i2c_check_client_addr_validity(client);
 527        if (status) {
 528                dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
 529                        client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);
 530                goto out_err_silent;
 531        }
 532
 533        /* Check for address business */
 534        status = i2c_check_addr_busy(adap, client->addr);
 535        if (status)
 536                goto out_err;
 537
 538        client->dev.parent = &client->adapter->dev;
 539        client->dev.bus = &i2c_bus_type;
 540        client->dev.type = &i2c_client_type;
 541        client->dev.of_node = info->of_node;
 542
 543        /* For 10-bit clients, add an arbitrary offset to avoid collisions */
 544        dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
 545                     client->addr | ((client->flags & I2C_CLIENT_TEN)
 546                                     ? 0xa000 : 0));
 547        status = device_register(&client->dev);
 548        if (status)
 549                goto out_err;
 550
 551        dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n",
 552                client->name, dev_name(&client->dev));
 553
 554        return client;
 555
 556out_err:
 557        dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x "
 558                "(%d)\n", client->name, client->addr, status);
 559out_err_silent:
 560        kfree(client);
 561        return NULL;
 562}
 563EXPORT_SYMBOL_GPL(i2c_new_device);
 564
 565
 566/**
 567 * i2c_unregister_device - reverse effect of i2c_new_device()
 568 * @client: value returned from i2c_new_device()
 569 * Context: can sleep
 570 */
 571void i2c_unregister_device(struct i2c_client *client)
 572{
 573        device_unregister(&client->dev);
 574}
 575EXPORT_SYMBOL_GPL(i2c_unregister_device);
 576
 577
 578static const struct i2c_device_id dummy_id[] = {
 579        { "dummy", 0 },
 580        { },
 581};
 582
 583static int dummy_probe(struct i2c_client *client,
 584                       const struct i2c_device_id *id)
 585{
 586        return 0;
 587}
 588
 589static int dummy_remove(struct i2c_client *client)
 590{
 591        return 0;
 592}
 593
 594static struct i2c_driver dummy_driver = {
 595        .driver.name    = "dummy",
 596        .probe          = dummy_probe,
 597        .remove         = dummy_remove,
 598        .id_table       = dummy_id,
 599};
 600
 601/**
 602 * i2c_new_dummy - return a new i2c device bound to a dummy driver
 603 * @adapter: the adapter managing the device
 604 * @address: seven bit address to be used
 605 * Context: can sleep
 606 *
 607 * This returns an I2C client bound to the "dummy" driver, intended for use
 608 * with devices that consume multiple addresses.  Examples of such chips
 609 * include various EEPROMS (like 24c04 and 24c08 models).
 610 *
 611 * These dummy devices have two main uses.  First, most I2C and SMBus calls
 612 * except i2c_transfer() need a client handle; the dummy will be that handle.
 613 * And second, this prevents the specified address from being bound to a
 614 * different driver.
 615 *
 616 * This returns the new i2c client, which should be saved for later use with
 617 * i2c_unregister_device(); or NULL to indicate an error.
 618 */
 619struct i2c_client *i2c_new_dummy(struct i2c_adapter *adapter, u16 address)
 620{
 621        struct i2c_board_info info = {
 622                I2C_BOARD_INFO("dummy", address),
 623        };
 624
 625        return i2c_new_device(adapter, &info);
 626}
 627EXPORT_SYMBOL_GPL(i2c_new_dummy);
 628
 629/* ------------------------------------------------------------------------- */
 630
 631/* I2C bus adapters -- one roots each I2C or SMBUS segment */
 632
 633static void i2c_adapter_dev_release(struct device *dev)
 634{
 635        struct i2c_adapter *adap = to_i2c_adapter(dev);
 636        complete(&adap->dev_released);
 637}
 638
 639/*
 640 * This function is only needed for mutex_lock_nested, so it is never
 641 * called unless locking correctness checking is enabled. Thus we
 642 * make it inline to avoid a compiler warning. That's what gcc ends up
 643 * doing anyway.
 644 */
 645static inline unsigned int i2c_adapter_depth(struct i2c_adapter *adapter)
 646{
 647        unsigned int depth = 0;
 648
 649        while ((adapter = i2c_parent_is_i2c_adapter(adapter)))
 650                depth++;
 651
 652        return depth;
 653}
 654
 655/*
 656 * Let users instantiate I2C devices through sysfs. This can be used when
 657 * platform initialization code doesn't contain the proper data for
 658 * whatever reason. Also useful for drivers that do device detection and
 659 * detection fails, either because the device uses an unexpected address,
 660 * or this is a compatible device with different ID register values.
 661 *
 662 * Parameter checking may look overzealous, but we really don't want
 663 * the user to provide incorrect parameters.
 664 */
 665static ssize_t
 666i2c_sysfs_new_device(struct device *dev, struct device_attribute *attr,
 667                     const char *buf, size_t count)
 668{
 669        struct i2c_adapter *adap = to_i2c_adapter(dev);
 670        struct i2c_board_info info;
 671        struct i2c_client *client;
 672        char *blank, end;
 673        int res;
 674
 675        memset(&info, 0, sizeof(struct i2c_board_info));
 676
 677        blank = strchr(buf, ' ');
 678        if (!blank) {
 679                dev_err(dev, "%s: Missing parameters\n", "new_device");
 680                return -EINVAL;
 681        }
 682        if (blank - buf > I2C_NAME_SIZE - 1) {
 683                dev_err(dev, "%s: Invalid device name\n", "new_device");
 684                return -EINVAL;
 685        }
 686        memcpy(info.type, buf, blank - buf);
 687
 688        /* Parse remaining parameters, reject extra parameters */
 689        res = sscanf(++blank, "%hi%c", &info.addr, &end);
 690        if (res < 1) {
 691                dev_err(dev, "%s: Can't parse I2C address\n", "new_device");
 692                return -EINVAL;
 693        }
 694        if (res > 1  && end != '\n') {
 695                dev_err(dev, "%s: Extra parameters\n", "new_device");
 696                return -EINVAL;
 697        }
 698
 699        client = i2c_new_device(adap, &info);
 700        if (!client)
 701                return -EINVAL;
 702
 703        /* Keep track of the added device */
 704        mutex_lock(&adap->userspace_clients_lock);
 705        list_add_tail(&client->detected, &adap->userspace_clients);
 706        mutex_unlock(&adap->userspace_clients_lock);
 707        dev_info(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
 708                 info.type, info.addr);
 709
 710        return count;
 711}
 712
 713/*
 714 * And of course let the users delete the devices they instantiated, if
 715 * they got it wrong. This interface can only be used to delete devices
 716 * instantiated by i2c_sysfs_new_device above. This guarantees that we
 717 * don't delete devices to which some kernel code still has references.
 718 *
 719 * Parameter checking may look overzealous, but we really don't want
 720 * the user to delete the wrong device.
 721 */
 722static ssize_t
 723i2c_sysfs_delete_device(struct device *dev, struct device_attribute *attr,
 724                        const char *buf, size_t count)
 725{
 726        struct i2c_adapter *adap = to_i2c_adapter(dev);
 727        struct i2c_client *client, *next;
 728        unsigned short addr;
 729        char end;
 730        int res;
 731
 732        /* Parse parameters, reject extra parameters */
 733        res = sscanf(buf, "%hi%c", &addr, &end);
 734        if (res < 1) {
 735                dev_err(dev, "%s: Can't parse I2C address\n", "delete_device");
 736                return -EINVAL;
 737        }
 738        if (res > 1  && end != '\n') {
 739                dev_err(dev, "%s: Extra parameters\n", "delete_device");
 740                return -EINVAL;
 741        }
 742
 743        /* Make sure the device was added through sysfs */
 744        res = -ENOENT;
 745        mutex_lock_nested(&adap->userspace_clients_lock,
 746                          i2c_adapter_depth(adap));
 747        list_for_each_entry_safe(client, next, &adap->userspace_clients,
 748                                 detected) {
 749                if (client->addr == addr) {
 750                        dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
 751                                 "delete_device", client->name, client->addr);
 752
 753                        list_del(&client->detected);
 754                        i2c_unregister_device(client);
 755                        res = count;
 756                        break;
 757                }
 758        }
 759        mutex_unlock(&adap->userspace_clients_lock);
 760
 761        if (res < 0)
 762                dev_err(dev, "%s: Can't find device in list\n",
 763                        "delete_device");
 764        return res;
 765}
 766
 767static DEVICE_ATTR(new_device, S_IWUSR, NULL, i2c_sysfs_new_device);
 768static DEVICE_ATTR(delete_device, S_IWUSR, NULL, i2c_sysfs_delete_device);
 769
 770static struct attribute *i2c_adapter_attrs[] = {
 771        &dev_attr_name.attr,
 772        &dev_attr_new_device.attr,
 773        &dev_attr_delete_device.attr,
 774        NULL
 775};
 776
 777static struct attribute_group i2c_adapter_attr_group = {
 778        .attrs          = i2c_adapter_attrs,
 779};
 780
 781static const struct attribute_group *i2c_adapter_attr_groups[] = {
 782        &i2c_adapter_attr_group,
 783        NULL
 784};
 785
 786struct device_type i2c_adapter_type = {
 787        .groups         = i2c_adapter_attr_groups,
 788        .release        = i2c_adapter_dev_release,
 789};
 790EXPORT_SYMBOL_GPL(i2c_adapter_type);
 791
 792/**
 793 * i2c_verify_adapter - return parameter as i2c_adapter or NULL
 794 * @dev: device, probably from some driver model iterator
 795 *
 796 * When traversing the driver model tree, perhaps using driver model
 797 * iterators like @device_for_each_child(), you can't assume very much
 798 * about the nodes you find.  Use this function to avoid oopses caused
 799 * by wrongly treating some non-I2C device as an i2c_adapter.
 800 */
 801struct i2c_adapter *i2c_verify_adapter(struct device *dev)
 802{
 803        return (dev->type == &i2c_adapter_type)
 804                        ? to_i2c_adapter(dev)
 805                        : NULL;
 806}
 807EXPORT_SYMBOL(i2c_verify_adapter);
 808
 809#ifdef CONFIG_I2C_COMPAT
 810static struct class_compat *i2c_adapter_compat_class;
 811#endif
 812
 813static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
 814{
 815        struct i2c_devinfo      *devinfo;
 816
 817        down_read(&__i2c_board_lock);
 818        list_for_each_entry(devinfo, &__i2c_board_list, list) {
 819                if (devinfo->busnum == adapter->nr
 820                                && !i2c_new_device(adapter,
 821                                                &devinfo->board_info))
 822                        dev_err(&adapter->dev,
 823                                "Can't create device at 0x%02x\n",
 824                                devinfo->board_info.addr);
 825        }
 826        up_read(&__i2c_board_lock);
 827}
 828
 829static int i2c_do_add_adapter(struct i2c_driver *driver,
 830                              struct i2c_adapter *adap)
 831{
 832        /* Detect supported devices on that bus, and instantiate them */
 833        i2c_detect(adap, driver);
 834
 835        /* Let legacy drivers scan this bus for matching devices */
 836        if (driver->attach_adapter) {
 837                dev_warn(&adap->dev, "%s: attach_adapter method is deprecated\n",
 838                         driver->driver.name);
 839                dev_warn(&adap->dev, "Please use another way to instantiate "
 840                         "your i2c_client\n");
 841                /* We ignore the return code; if it fails, too bad */
 842                driver->attach_adapter(adap);
 843        }
 844        return 0;
 845}
 846
 847static int __process_new_adapter(struct device_driver *d, void *data)
 848{
 849        return i2c_do_add_adapter(to_i2c_driver(d), data);
 850}
 851
 852static int i2c_register_adapter(struct i2c_adapter *adap)
 853{
 854        int res = 0;
 855
 856        /* Can't register until after driver model init */
 857        if (unlikely(WARN_ON(!i2c_bus_type.p))) {
 858                res = -EAGAIN;
 859                goto out_list;
 860        }
 861
 862        /* Sanity checks */
 863        if (unlikely(adap->name[0] == '\0')) {
 864                pr_err("i2c-core: Attempt to register an adapter with "
 865                       "no name!\n");
 866                return -EINVAL;
 867        }
 868        if (unlikely(!adap->algo)) {
 869                pr_err("i2c-core: Attempt to register adapter '%s' with "
 870                       "no algo!\n", adap->name);
 871                return -EINVAL;
 872        }
 873
 874        r class="linesref">r class="linesref">r class="litadap->dev, )
        r class="linesref">r class="linesref">r class="litadap->/a>->userspace_clients_lock);
 826INIT_LIST_HEAD=userspace_clieINIT_LIST_HEADss="sref">r class="linesref">r class="linesref">r class="litadap->/a>-> 862        &qimen clao 1 seco devf notcla_reay se after driver model init */
 868    ef">r class="linesref">r class="litadap->qimen cef="+code=to_i2cimen ce=res"=ass="sref">res < 0)
 8"> 868    ef">r class="linesref">r class="litadap->qimen cef="+code=to_i2cimen ce=res" 8"> 868    HZef="+code=to_i2HZAL" class="sref">EINVAL;
 861
            se dev_warn(&adap->dev, 
"no algo!\n", adap-> 783a>(&adap->i2c_bus_tmpt="+code=namh9tempte=res" ass="sref">type == &a>(!);
 874a>(&adap->i2c_bus_t/a>->type == &     i2c-core.c#L785" id="L788" cla88href="+code=EINVAL"9t>              ree_drivet;i2c-coef="+code=device_drivet;i2c-co" class="sref">dev_warn(&adap-> 836            res < 0)
 859                goto out_list;
 828
 759ttr_dbgef="+code=dev_attr_dbg" class="sref">dev_warn(&adap->dev, , adap->name);
 780
 809#ifdef CONFIG_I2C_COMPAT
                res  unlikter_type" clref="+code=i2c_adapter_compat_class" class="sref">i2c_a" class="sref">next, &adap->dev,
 823         " name="L874"> 874a>(&adap->i2c_bus_tpar(name);
 734        if (res < 0)
 735                dev_warn(&adap->res < 0)
 746   class="sref">dev, ass="sibil clas"sre line"string">"no name!\n");
 811#endif
 828
 862        pre-de> 8rment">/* ="commefter driver model init */
 734    /span>, adap->adapres < 0)
 8s="sref">unlikter_oid i2c_scansref">i2c_adapter *);
 812
 862        
 874k_nested" "+code=rt_mutex_init"" class="sref">mutex_unlock);
      typetry" clasdr>->ass="sref">mutex_unlock(!S_IWUSR, NUect(adtic int __"o name!\n");
 826        mutex_unlock);
 844        return 0;
 769
   goto  769
 874k_nested" "+code=rt_mutex_init"" class="sref">mutex_unlock);
        idr_removhref="+code=i2c_bdr_removhass="sref">mutex_unlock.NUect(adap-> 783        mutex_unlock);
 764        return res;
 845}
 816
 797/**
 798
 799
 800< Conunlt:e_fo sleep to avoid oopses caused
 795 *
 792< Tt lerout822: attion nd.de> 8rmsnamnglyAttempt tan citsegacy-&gbeme driver model iterator
 793
 794
 795 *
 796
 797
 798&wise, a clgatter errno valu2: atrL764"edevice as an i2c_adapter.
 799
 852static  i2c_do_add_adapter(struct i2c_adapter *adapter)
 831{
        idref="+code=i2c_bdNULL" class="sref">NU    int res = 0;
 873
NU  "+code=list_for_ea  "+c" cl:e" name="L769"> 769
 734    bdr_pretgea href="+code=i2cdr_pretgeaass="sref">mutex_unlock.NUGFP_KERNE/a>, res < 0)
 866                rNOMEMa>, res;
 818k_nested" "+code=rt_mutex_init"" class="sref">mutex_unlock);
 862        &q ">&e mea"s , 
                recdr_ge mutex_unlock.NUect(adapter,
                 ss="sref">adapnext);
                mutex_unlock);
 873
 734        if (algo)) {
 "L734"> 734        if (res = -res < 0)
 746 859               "+code=list_for_ea  "+c" clo name!\n");
 "L764"> 764        return res;
 845}
 769
         == adapter->recdref="+code=i2c_bdNULLs" class="sref">res;
 849        retint i2sref">i2c_adapter *res;
 845}
res<807EXPORT_SYMBOL< res;
 834
 795/**
 796
 797
 798
 799< to avoid oopses caused
 800< Tt lerout822: attion nd.de> 8rmsnamnglyAttempt tan citsegacy-&gbeme driver model iterator
 795<=matC ds.  Framexrefle,s="stre tdringlyAttemptst@dev: yc-cm-on-chip CPUs,e driver model iterator
 792< driog">&wiseegailtsp: nd."comsyc-cm class=main"srefted dew">&e i2s="sref">i2c_sdriver model iterator
 793
 794
 795< If="commequesaptegacy-&gbem patse and.-1,="conhe nodes you fiwill behavhasce as an i2c_adapter.
 796 797
 798pre-beonhde> 8rmentdriet legac,="conhbomsu&e tc_sdriver model iterator
 799&wise_sdriver model iterator
 800< "commequirptegacyID=may notcb" availableevice as an i2c_adapter.
 795 *
 792< pan clt lerL764"s zero, "comspecifiptedttempt becd=" availabley drspan class="comment"> *
 793 *
 794pre-de> 8rmener mod_adapter" cla"sref">i2c() pats_foned,e driver model iterator
 795< d de"comappropr anotd register unt">/* ="comme8rmstring"d.  Og">&wisetede driver model iterator
 796
 797
 852static  i2c_do_add_adapter(struct i2c_adapter(res < 0)
algo)) {
        idref="+code=i2c_bdNULLs" class="sref">res;
        e" npt="+code=namh9tee" nptNULLs" class="sref">res;
 812
 863    /span>, adap-> 862        
 "L849"> 849        ret sref">i2c_adapter(res;
 734    /span>, adap->adap->res < 0)
 866                return -EINVAL;
NU  "+code=list_for_ea  "+c" cl:e" name="L769"> 769
 868    bdr_pretgea href="+code=i2cdr_pretgeaass="sref">mutex_unlock.NUGFP_KERNE/a>, res < 0)
 866                rNOMEMa>, res;
 861
        k_nested" "+code=rt_mutex_init"" class="sref">mutex_unlock);
 862        &q ">&e mea"s , 
 794>>>>>>>>* w ="eede"com, &qoy drcs="commesul>%s' with "
 795>>>>>>>>* if it fails, too bad */
 826e" npt="+code=namh9tee" nptNULLs" class="sref">recdr_ge mutex_unlock.NUect, NUect(adap->next);
 857    e" npt="+code=namh9tee" nptNULLs"=as            ="sref">nextbusnum/a>(adap->algo)) {
 858        e" npt="+code=namh9tee" nptNULLs"                 rBUSYa>, res;
 869        idr_removhref="+code=i2c_bdr_removhass="sref">mutex_unlock.NUidref="+code=i2c_bdNULL"o name!\n");
name!\n");
 874k_nest  mutex_unlock);
 857    e" npt="+code=namh9tee" nptNULLs"=aclass="sref">res = -res < 0)
 859               "+code=list_for_ea  "+c" clo name!\n");
 834
 734    e" npt="+code=namh9tee" nptNULLs"=ass="sref">res < 0)
 "L826"> 826e" npt="+code=namh9tee" nptNULLs" class="sref">recretint i2sref">i2c_adapter(res;
 849       e" npt="+code=namh9tee" nptNULLs" class="sref">res;
 845}
res<807EXPORT_SYMBOL< res;
 834
 829static intdel href="+code=i2c_do_add_adaptedel href="+ref">i2c_do_add_adapter(str834"> code=i2c_do_add_adap34"> lass="sref">i2c_adapt834"> code=i2c_do_addp34"> lasslass="sref">adapter,
               i2c_do_add_adapter(struct i2c_adapter *adapter)
 853{
(strclass=href="+code=i2c_adaclass=lass="sref">i2c_adaptclass=href="+code=i2cclass=lass,="sref">i2c_adapt_ res;
 854        int res;
 816
 862        wmstring"d ourselvmme8s="commesul>sof hardwarespan class="comment"> *
 798>>>>>>>>* prob mod(er modatd regi class=tect" ;%s)>* if it fails, too bad */
 759listetry" clas98EXPORT_SYMclass=href="+code=i2cclass=lass,=sref">i2c_adapt_ next code=i2c_do_addp34"> lass" class="sref">adap< href="=userspace_clieclass=">use=d" class="sref">dect" ever(algo)) {
 "L734"> 734    class=href="+code=i2cclass=lass" class="sref">adap *i2c_adapter *algo)) {
         " class="sref">der_dbgef="+code=dev_attr_dbg" class="sref">dev_warn(& == adapter->dev, algo)) {
                 " class="sref">class=href="+code=i2cclass=lass" class="sref">adap->S_IWUclass=href="+code=i2cclass=lass" class="sref">adap.res;
 823 "L759"> 759listedelref="+code=i2c_listedelass="sref">mutex_unlockadap(res;
 823 "L759"> 759_adaunpter" cla treathref="+code=i2c_adaunpter" cla treatss="sref">EXPORT_SYMclass=href="+code=i2cclass=lassss" class="sref">res;
 e" name="L845"> 845}
 845}
);
unlike834"> code=i2c_do_addp34"> lass" class="sref">adap<"ecclasa>(& == (& ==r" class="sref">adapter)
 "L844"> 844        return 0;
 759        dev_warn(& == adapter->dev, (& ==;%s: atdepre"dapter method is depass="sref">algo)) {
  s="sref">unlike834"> code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"sref">i2c_bus_tid=">->res;
                re834"> code=i2c_do_addp34"> lass" class="sref">adap<"ecclasa>(& == (& ==r" c2sref">i2c_adapter *res;
 863        if (res < 0)
 864        dev_     dev_warn(& == adapter->dev, (& ==;failsur( regid)r '%s' with "
 865" class="sref">dev, d34"> code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"sref">i2c_bus_tid=">->res;
 764        return res;
 845}
 828
 829sta_aunpter" claclass=href="+code=i2c_aunpter" claclass=ref">i2c_do_add_adapter treathref="+code=i2c treatss="="sref">i2c_adapt8a>->i2c_adapt8ummcode=list_for_ea8ummce=res="sref">res < 0)
 853{
(strclass=href="+code=i2c_adaclass=lass="sref">i2c_adaptclass=href="+code=i2cclass=lasss" class="sref">recret> 8ifyrclass=href="+code=i2c_ada> 8ifyrclass=r" c2sref">i2c_adapt/a>-> 857    class=href="+code=i2cclass=lasss           ="sref">next(EXPORT_SYMclass=href="+code=i2cclass=lass" class="sref">adap->dev, "ns="sref">res < 0)
 "L759"> 759_adaunpter" cla treathref="+code=i2c_adaunpter" cla treatss="sref">EXPORT_SYMclass=href="+code=i2cclass=lassss" class="sref">res;
 844        return 0;
 845}
 816
 829sta_aunpter" cla8ummcode=list_for_ea_aunpter" cla8ummcref">i2c_do_add_adapter treathref="+code=i2c treatss="="sref">i2c_adapt8a>->i2c_adapt8ummcode=list_for_ea8ummce=res="sref">res < 0)
 853{
(strclass=href="+code=i2c_adaclass=lass="sref">i2c_adaptclass=href="+code=i2cclass=lasss" class="sref">recret> 8ifyrclass=href="+code=i2c_ada> 8ifyrclass=r" c2sref">i2c_adapt/a>-> 857    class=href="+code=i2cclass=lasss="sref">res < 0)
 8s="sref">unlikter_unpter" cla treathref="+code=i2c_adaunpter" cla treatss="sref">EXPORT_SYMclass=href="+code=i2cclass=lassss" class="sref">res;
 844        return 0;
 845}
 834
 829sta_adapter" removh class="scode=i2c_do_add_adapter" removh class="sref">i2c_do_add_adapter treatr834"> code=i2c_do_add treatr834"> ss="="sref">i2c_adapt8code=i2c_do_add e=dev"voide;sref">i2c_adapt8atacode=i2c_do_add atalasss="sref">res < 0)
 853{
 849       tic intdel href="+code=i2c_do_add_adaptedel href="+ref"> 849       to_(str834"> code=i2c_do_addto_(str834"> r" c2sref">i2c_adapt/code=i2c_do_add e=de)=d" class="sref">datacode=i2c_do_add atalasss844        return 0;
 845}
 769
 798/**
 795<=(str8el href="+ - unpter" clinglyAttemptpan class="comment">/**
 792< @e: A:="comlass="s be modunpter" clen to avoid oopses caused
 793
 794
 795< Tt leunpter" clssnamnglyAttempt taich wng prtreously pter" clen to avoid oopses caused
 796
 797
 852static del href="+code=i2c_do_add_adapel href="+ref">i2c_do_add_adapter(struct i2c_adapter(res < 0)
algo)) {
 854        int res = 0;
(struct i2c_adaptfoun/code=i2c_do_addfoun/e=res" class="sref">res;
(strclass=href="+code=i2c_adaclass=lass="sref">i2c_adaptclass=href="+code=i2cclass=lass,="sref">i2c_adaptnnlt>->res;
 873
 862        
      k_nested" "+code=rt_mutex_init"" class="sref">mutex_unlock);
 826foun/code=i2c_do_addfoun/e=res" class="sref">recdr_fin/code=i2c_do_addcdr_fin/ass="sref">mutex_unlock.NUect(adap->      k_nest  mutex_unlock);
 826foun/code=i2c_do_addfoun/e=res!ass="sref">busnum/a>(algo)) {
 869        pla tbugef="+code=dev_apla tbugr" c2sclass="sref">dev, 
 865"asclass="sref">dev, (adap->res;
 866                return -EINVAL;
 845}
 873
 862         8 aboutclt lerLmoval 
      k_nested" "+code=rt_mutex_init"" class="sref">mutex_unlock);
 826        retypetry" clasdr>->ass="sref">mutex_unlock(!S_IWUSR, NUect();
 " name="L869"> 869        _adapter" removh class="scode=i2c_do_add_adapter" removh class="sref""o name!\n");
 818k_nest  mutex_unlock);
 868        if (res < 0)
 866 764        return res;
 861
 862        instanting"d @dev: ycfs 
 783      ed" _nesapt"+code=rt_mutex_init"" cl_nesaptass="sref">mutex_unlock(adap);
 823 > 8s="sref">unlikter_lass" cldepth/a>.i2c_adapt/a>();
      listetry" clas98EXPORT_SYMclass=href="+code=i2cclass=lass,=sref">i2c_adaptnnlt>->next(adap);
 746 23 > 8s="sref">unlikdect" ever(algo)) {
 add_adapter tr_dbgef="+code=dev_attr_dbg" class="sref">dev_warn(&/a>(adap->dev, class=href="+code=i2cclass=lass" class="sref">adap->algo)) {
 "L837"> add_adapterclass=href="+code=i2cclass=lass" class="sref">adap.res;
 869        listedelref="+code=i2c_listedelass="sref">mutex_unlockadap(res;
 8s="sref">unlikter_unpter" cla treathref="+code=i2c_adaunpter" cla treatss="sref">EXPORT_SYMclass=href="+code=i2cclass=lassss" class="sref">res;
 845}
        k_nest  mutex_unlock(adapres;
 873
 862        wmsdo noter driver model init */
 795>>>>>>>>* check="comme764"ed valu2e Tt le leA two-p"L7 dapter", becduse_sdriver model iterator
 796>>>>>>>>* wmstan clast;removh="com ummc= treat">dur mod"comfirst p"L7:="coy_sdriver model iterator
 797>>>>>>>>* coulduhavh>beonhinstanting"d by ptalm treat">wish mod"onclean_sdriver model iterator
 798>>>>>>>>* "com up.properly, so wmsgivh="comeA chancs="osdo thatcfirst. 
 759        re8treatrtry" claschilver(dev_warn(&/a>(adap->S_IWUSR, NU_aunpter" claclass=href="+code=i2c_aunpter" claclass=ref"ss" class="sref">res;
                re8treatrtry" claschilver(dev_warn(&/a>(adap->S_IWUSR, NU_aunpter" cla8ummcode=list_for_ea_aunpter" cla8ummcref"ss" class="sref">res;
 861
NUCONFIG_I2C_COMPATode=list_for_eaCONFIG_I2C_COMPAT"line" name="L861"> 861
 783core._"> pat removh_L81 "+code=rt_mutex ore._"> pat removh_L81 ss="sref">EXPORT_SYM== &lass" cl"> pat  ore./a>. pat  ore.e=re" class="sref">next(adap-> 861
 823 > " name="L783"> 783ect(adap->i2c_bus_tparss=href="+code=i2cparss=ref"ss" class="sref">res;
res;
 816
 862        /* ="d="e legone afmpt "ereatrunpter" cli
 818 tr_dbgef="+code=dev_attr_dbg" class="sref">dev_warn(&/a>(adap->dev, (adap->res;
 769
 862        
 874til l"> pleou f/a>. pleou f" class="sref">dev_warn(&/a>(adap releasever(res;
        "ereatrunpter" cler(dev_warn(&/a>(adap->res;
 873
 862        
      warertry""> pleou f/a>. pleou f" class="sref">dev_warn(&/a>(adap releasever(res;
 816
 862        
 818k_nested" "+code=rt_mutex_init"" class="sref">mutex_unlock);
 759idr_removhref="+code=i2c_bdr_removhass="sref">mutex_unlock.NUect(adap-> 759k_nest  mutex_unlock);
 861
 862        aseclt leAttempt ig eegisgo mod"onbe_sdriver model iterator
 793>>>>>>>>>> dnon agaifi
 759kemsea href="+code=i2kemsea" class="sref">dev_warn(&/a>(adap-> 734    /span>, adap->);
);
class="sref">res = 0;
 845}
NUT_SYMBOL" cla->EXPORT_SYM== &del href="+code=i2c_do_add_adapel href="+ref""o name!\n");
 769
 834
 795
 812
 852static try" clasda>->ss="svoide;sref">i2c_adapt8atacode=i2c_do_add atalass,="L85("sref">i2c_adaptff/a>.i2c_do_add_adapter treathref="+code=i2c treatss="="v"voide;ns="sref">res < 0)
algo)) {
 854        int res;
 816
      k_nested" "+code=rt_mutex_init"" class="sref">mutex_unlock);
 818        retypetry" clasda>->ass="sref">mutex_unlock(!S_IWUSR, NU8atacode=i2c_do_add atalass,=sref">i2c_adaptff/a>.);
 759k_nest  mutex_unlock);
 834
 764        return res;
 845}
NUT_SYMBOL" cla_GPref="+code=EXPORT_SYMBOL" cla_GPrss="sref">EXPORT_SYMBOL->ss=""o name!\n");
 834
 829sta_adapter" alas834"> code=i2c_do_add_adapter" alas834"> ss="si2c_do_add_adapter treathref="+code=i2c treatss="="sref">i2c_adapt8a>->i2c_adapt8atacode=i2c_do_add atalasss="sref">res < 0)
 853{
 857    8a>->adap<mutex_unlockres < 0)
 "L764">class="sref">res = 0;
 764       iadaptela class="scode=i2c_do_add_adaptela class="sss="sref">EXPORT_SYM8atacode=i2c_do_add atalass,=sref">i2c_adaptto_(strlass="scode=i2c_do_addto_(strlass="sss="sref">EXPORT_SYM8a>->);
 845}
 861
 792
 793  ig used with one or mo&e iadaclass= ( treat) n_SYle"osacter"vice as an i2c_adapter.
 794< iad slavh>chips, on a gacyinstance "L7ocing"d with some iadalass="sevice as an i2c_adapter.
 795
 816
 852static pter" cla834"> code=i2c_do_addtic pter" cla834"> ss="si2c_do_add_adaptermodulhref="+code=i2c_modulhss="="sref">i2c_adaptown> code=i2c_do_addown> lass,=i2c_do_add_adapter(str834"> code=i2c_do_add_adap34"> lass="sref">i2c_adapt834"> code=i2c_do_addp34"> lasss="sref">res < 0)
 853{
 854        int res;
 834
 862          model =il >
 857    ck"ikelcode=list_for_eack"ikelcss="sref">EXPORT_SYMWARN_O= -unlike== &a>(!i2c_bus_tphref="+code=i2cpe=des"s="sref">res < 0)
 866                r/a> = -res;
 834
 862          to="comlistsof iad d73"> 8 in="com 34">   hre>
 826834"> code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"sref">i2c_bus_town> code=i2c_do_addown> lasss" class="sref">reown> code=i2c_do_addown> lasss" class="sref">res;
      834"> code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"sref">i2c_bus_tbpt="+code=namh9tebptNULLs" sref">mutex_unlock(!res;
 828
 862           hreer driver model init */
 798 * willuhavh>callsurprobe() tdri leematch mo-but-unboun/m treat"evice as an i2c_adapter.
 795"L823"> *ter driver model init */
                re834"> _pter" cler( _pter" class="sref">mutex_unlock code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"o name!\n");
 863        if (res < 0)
 866 764        return res;
);
 862         8 shoulduswitchd"on tv_pm_opcyinstead. 
 857    834"> code=i2c_do_addp34"> lass" class="sref">adapres < 0)
 sref">i2c_bus_tpr     dev,   [ regis]dur modlegacy suspen/;%ser method is depass="sref">algo)) {
 "+code=EINVAL"9t>      834"> code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"sref">i2c_bus_t/d=">->res;
 857    834"> code=i2c_do_addp34"> lass" class="sref">adap->res < 0)
 8s="sref">unlikpr     dev,   [ regis]dur modlegacy codu=";%ser method is depass="sref">algo)) {
 "+code=EINVAL"9t>      834"> code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"sref">i2c_bus_t/d=">->res;
 873
 759pla tbugef="+code=dev_apla tbugr" c2sclass="sref">dev,   [ regis]dpter" clener method is depo algo!\n"<834"> code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"sref">i2c_bus_t/d=">->res;
);
 826INIT_LIST_HEAD>->mutex_unlock code=i2c_do_addp34"> lass" class="sref">adapres;
 862        
 818BOL->ss="57"> 857    834"> code=i2c_do_addp34"> lass" class="sref">NU_adapter" alas834"> code=i2c_do_add_adapter" alas834"> ss="ss" class="sref">res;
 769
class="sref">res = 0;
 845}
NUT_SYMBOL" claef="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL code=i2c_do_addtic pter" cla834"> ss="ss" class="sref">res;
 873
 829sta_adapter" removh c834"> code=i2c_do_add_adapter" removh c834"> ss="si2c_do_add_adapter treathref="+code=i2c treatss="="sref">i2c_adapt8a>->i2c_adapt8atacode=i2c_do_add atalasss="sref">res < 0)
 853{
 857    8a>->adap<mutex_unlockres < 0)
 "L764">class="sref">res = 0;
 764       iadaptedel href="+code=i2c_do_add_adaptedel href="+ref"> 849       8atacode=i2c_do_add atalass,=sref">i2c_adaptto_(strlass="scode=i2c_do_addto_(strlass="sss="sref">EXPORT_SYM8a>->);
 845}
 834
 795
 792< iadapel  34">  - unpter" clingly834"> ssce as an i2c_adapter.
 793  be modunpter" clen to avoid oopses caused
 794< Conunlt:e_fo sleep to avoid oopses caused
 795
       iadapel  34"> code=i2c_do_add_adapel  34"> ss="si2c_do_add_adapter(str834"> code=i2c_do_add_adap34"> lass="sref">i2c_adapt834"> code=i2c_do_addp34"> lasss="sref">res < 0)
 853{
 818BOL->ss="57"> 857    834"> code=i2c_do_addp34"> lass" class="sref">NU_adapter" removh c834"> code=i2c_do_add_adapter" removh c834"> ss=""o name!\n");
 769
 759"34"> _unpter" cler( _unpter" class="sref">mutex_unlock code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"o name!\n");
 874pla tbugef="+code=dev_apla tbugr" c2sclass="sref">dev,   [ regis]dunpter" clener method is depo algo!\n"<834"> code=i2c_do_addp34"> lass" class="sref">adap<"34"> code=i2c_do_addp34"> lass"sref">i2c_bus_t/d=">->res;
 845}
NUT_SYMBOL" claef="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL code=i2c_do_add_adapel  34"> ss="ss" class="sref">res;
 834
 795
 816
 797
 798< iadauseaclass= - incremss=s="commefclenat countsof "comiad class= i2c_dou&evice as an i2c_adapter.
 793
 798
 795<=Eclasltermmefclenat "osa class= ihouldubrmmefcountede Tte "34">  model doe"vice as an i2c_adapter.
 792< thatcautom namally ng partsof  34">  bind mo, so thatcmost d73"> 8 don clastvice as an i2c_adapter.
 793* need="osdo thig explicitly:="coy holduammefclenat until "coy clasrt unboun/e=ce as an i2c_adapter.
 794< @dev:"com treatevice as an i2c_adapter.
 795
 796  to="comclass= with "comincremss=ed=mefclenat count>  ig me764"edevice as an i2c_adapter.
 797
(strclass=href="+code=i2c_adaclass=lass="sref">i2c_adaptiadauseaclass=href="+code=i2c_adauseaclass=ss="si2c_do_add_adapter(strclass=href="+code=i2c_adaclass=lass="sref">i2c_adaptclass=href="+code=i2cclass=lasss="sref">res < 0)
algo)) {
 857    class=href="+code=i2cclass=lassssref"sref"_add_adaptergetedereathref="+code=i2cgetedereatass="sref">mutex_unlockadap->algo)) {
 866>mutex_unlockres;
>mutex_unlock, res;
 845}
NUT_SYMBOL" claef="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOLres;
);
 796
 797< tic ptleaseaclass= - ptleaseuamusesof "comiad class= i2c_dou&evice as an i2c_adapter.
 798< @class=:="comclass= be modno long>  mefclenatn to avoid oopses caused
 793< to avoid oopses caused
 798callsurwhen;amusersof a class= ig finish"d with itevice as an i2c_adapter.
 795
       iadaptleaseaclass=code=i2c_do_addtic ptleaseaclass=ss="si2c_do_add_adapter(strclass=href="+code=i2c_adaclass=lass="sref">i2c_adaptclass=href="+code=i2cclass=lasss="sref">res < 0)
algo)) {
 857    class=href="+code=i2cclass=lasss="sref">res < 0)
 "L874"> 874putedereathref="+code=i2cputedereatass="sref">mutex_unlockadap->res;
 845}
NUT_SYMBOL" claef="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOLres;
 828
(strcmd_argef="+code=dev_a(strcmd_arg"linelass="sref">algo)) {
 "L874"> 874cmdhref="+code=i2ccmdNULLs" class="sref">res;
i2c_adaptargef="+code=dev_aarg"lins" class="sref">res;
res;
 873
 829sta(strcmdef="+code=dev_a(strcmdss="si2c_do_add_adapter treathref="+code=i2c treatss="="sref">i2c_adapt8a>->i2c_adapt_argef="+code=dev_a_arg"lins="sref">res < 0)
 853{
(strclass=href="+code=i2c_adaclass=lass=eeeeee"sref">i2c_adaptclass=href="+code=i2cclass=lasss" class="sref">re_ada> 8ifyrclass=href="+code=i2c_ada> 8ifyrclass=ss="sref">EXPORT_SYM8a>->res;
(strcmd_argef="+code=dev_a(strcmd_arg"lineeeeee"sref">i2c_adaptargef="+code=dev_aarg"lins" class="sref">re_argef="+code=dev_a_arg"lins" class="sref">res;
 828
 868    class=href="+code=i2cclass=lassssref"sref"_add_adapter lass=href="+code=i2cclass=lass" class="sref">adap code=i2c_do_addp34"> lassssref"sref"_add_adapter lass=href="+code=i2cclass=lass" class="sref">adap code=i2c_do_addp34"> lass" class="sref">adap 7an/code=i2c_do_addc> 7an/"lins="sref">res < 0)
 8s="sref">unlik lass=href="+code=i2cclass=lass" class="sref">adap code=i2c_do_addp34"> lass" class="sref">adap 7an/code=i2c_do_addc> 7an/"linsref">EXPORT_SYMclass=href="+code=i2cclass=lass,=sref">i2c_adaptargef="+code=dev_aarg"lin" class="sref">adapi2c_adaptargef="+code=dev_aarg"lin" class="sref">adapres;
class="sref">res = 0;
 845}
 873
       iadaclass=stc> 7an/code=i2c_do_addiadaclass=stc> 7an/ss="si2c_do_add_adapter(strhref="+code=i2c_do_add_adalass="sss="e"sref">i2c_adaptaspan>,  829stacmdhref="+code=i2ccmdNULL,=voide;sref">i2c_adaptargef="+code=dev_aarg"linse" name="L873"> 873
 853{
(strcmd_argef="+code=dev_a(strcmd_arg"lineeeeee29"> 829stacmd_argef="+code=dev_acmd_arg"linlass="sref">res = 0;
res = 0;
 818cmd_argef="+code=dev_acmd_arg"lin"sref">i2c_bus_tcmdhref="+code=i2ccmdNULLs" class="sref">recmdhref="+code=i2ccmdNULLs" class="sref">res;
 759cmd_argef="+code=dev_acmd_arg"lin"sref">i2c_bus_targef="+code=dev_aarg"lins" class="sref">reargef="+code=dev_aarg"lins" class="sref">res;
 759"treatrtry" claschilver(dev_warn(&/a>(adap->mutex_unlocki2c_adapt(strcmdef="+code=dev_a(strcmdss="ss" class="sref">res;
 845}
NUT_SYMBOL" claef="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL 7an/code=i2c_do_addiadaclass=stc> 7an/ss="ss" class="sref">res;
 873
 829sta_a=il ef="+code=dev_a_a=il "lineref">EXPORT_SYMBOL<=il ef="+code=dev_aBOL<=il ss="svoidse" name="L873"> 873
 853{
 854      tvalef="+code=dev_a  tval"lins" class="sref">res;
res = 0;
 818  tvalef="+code=dev_a  tval"lins" class="sref">retypepter" cler(dev_warn(!res;
 868      tvalef="+code=dev_a  tval"linse" name="L873"> 873
 866 764        rtvalef="+code=dev_a  tval"lins" class="sref">res;
NUCONFIG_I2C_COMPATode=list_for_eaCONFIG_I2C_COMPAT"line" name="L861"> 861
(strhref="+l"> pat  ore./a>. pat  ore.e=res" class="sref">recore._"> pat reer" cler( pat reer" clss="srclass="sref">dev, res;
unlike== &href="+l"> pat  ore./a>. pat  ore.e=re)elass="sref">algo)) {
 818  tvalef="+code=dev_a  tval"lins"                 rNOMEMef="+code=EXPORTNOMEM"lins" class="sref">res;
 goto class="sref">retypeerler(res;
 845}
res;
 818  tvalef="+code=dev_a  tval"lins" class="sref">re== &la c834"> code=i2c_do_add== &la c834"> " class="sref">dev_warn code=i2c_do_adddummyc834"> ass=ss" class="sref">res;
 868      tvalef="+code=dev_a  tval"linse" name="L873"> 873
 goto class="sref">recore._erler(res;
class="sref">res = 0;
 812
NUcore._erler( 812
NUCONFIG_I2C_COMPATode=list_for_eaCONFIG_I2C_COMPAT"line" name="L861"> 861
      core._"> pat unpter" cler( pat unpter" clss="sref">EXPORT_SYMBOL pat  ore./a>. pat  ore.e=re)lass="sref">res = 0;
retypeerler( 812
res;
 818typeunpter" cler(dev_warn(!res;
 764        rtvalef="+code=dev_a  tval"lins" class="sref">res;
 845}
 861
       __exl ef="+code=dev_a_aexl "lineref">EXPORT_SYMBOL 873
algo)) {
 759iadapel  34"> code=i2c_do_add_adapel  34"> ss="sss="sref">dev_warn code=i2c_do_adddummyc834"> ass=ss" class="sref">res;
NUCONFIG_I2C_COMPATode=list_for_eaCONFIG_I2C_COMPAT"line" name="L861"> 861
 826core._"> pat unpter" cler( pat unpter" clss="sref">EXPORT_SYMBOL pat  ore./a>. pat  ore.e=re)lass="sref">res = 0;
res;
 818typeunpter" cler(dev_warn(!res;
 845}
 834
 795 8er driver model init */
 792< in subsy"<=il call() arn<, butcaromL82ked (and =il ialized) befo&e iadevice as an i2c_adapter.
 793*ter driver model init */
NUpost hre<=il callref="+code=i2c_post hre<=il callss="sref">EXPORT_SYMBOL<=il ef="+code=dev_aBOL<=il ss="ss" class="sref">res;
EXPORT_SYMmodulhEXPORT_SYMBOLres;
 816
 797
 798< "comfuncou fal =i clfaat "os"comiad typst"evice as an i2c_adapter.
 793
 798
 861
 792
 793* __BOL  - uned" ed flavorsof iad vice as an i2c_adapter.
 794< @lass: Handlt "osnglybptNUce as an i2c_adapter.
 795< @msgs: One or mo&e messagYle"osexecute befo&e STOP ig issued="oNUce as an i2c_adapter.
 796
 797< @num: Numbersof messagYle"osbesexecutedevice as an i2c_adapter.
 798
 793
 798
 795<=Aass" c ed"  mus= beshelurwhen;call modthig funcou f. Non tbug edggingvice as an i2c_adapter.
 792< takYleplaat.mlass" claalgo" clama" claxf>  exl" cnat isn clast;che" edevice as an i2c_adapter.
 793*ter driver model init */
 829sta_a=ad ef="+code=dev_a_a=ad vi="si2c_do_add_adapter(strhref="+code=i2c_do_add_adalass="sss="e"sref">i2c_adaptaspan>, i2c_adaptmsgsef="+code=dev_amsgsadap,=="L829"> 829stanumef="+code=dev_anum"linse" name="L873"> 873
 853{
reorig_jiffireturn res;
 854      tef="+code=dev_a  t"lin,=sref">i2c_adapttrcode=list_for_eatrc"lins" class="sref">res;
 828
 862        *ter driver model init */
 759orig_jiffireturn rejiffireturn res;
 868      tef="+code=dev_a  t"lins" 0,=sref">i2c_adapttrcode=list_for_eatrc"lins" 0"_add_adaptertrcode=list_for_eatrc"lins<" class="sref">rea>(&/a>(adap<  trireturn trcode=list_for_eatrc"lin++)elass="sref">algo)) {
 8"> 868      tef="+code=dev_a  t"lins" class="sref">rea>(&/a>(adap(adap ef="+code=dev_ama" claxf> ss="sref">EXPORT_SYMaspan>, i2c_adaptmsgsef="+code=dev_amsgsadap,=29"> 829stanumef="+code=dev_anum"linss" class="sref">res;
 "L868"> 868      tef="+code=dev_a  t"lins!"                 r/a> = - 873
res;
 "L868"> 868    time_afmptode=list_for_eatime_afmptss="sref">EXPORT_SYMjiffireturn  829staorig_jiffireturn rea>(&/a>(adap 873
res;
 845}
 828
 764        rtef="+code=dev_a  t"lins" class="sref">res;
 845}
EXPORT_SYM_a=ad ef="+code=dev_a_a=ad vi="ss" class="sref">res;
 812
 793
 794< BOL  - execute a r mole or "> bi"ed nglymessagYvice as an i2c_adapter.
 795< @lass: Handlt "osnglybptNUce as an i2c_adapter.
 796 797<       clminate "comoperaou f;  cla messagY begins with a STARTevice as an i2c_adapter.
 798< @num: Numbersof messagYle"osbesexecutedevice as an i2c_adapter.
 793< to avoid oopses caused
 798
 795
 792< Note "cat "co&e isdno requiremss= "cat  cla messagY be d    "oNUce as an i2c_adapter.
 793* "comsame slavomladress, although "cat is="commost "> 7on modelevice as an i2c_adapter.
 794
 829sta(strtransf> ef="+code=dev_a=ad vi="si2c_do_add_adapter(strhref="+code=i2c_do_add_adalass="sss="e"sref">i2c_adaptaspan>, i2c_adaptmsgsef="+code=dev_amsgsadap,=="L829"> 829stanumef="+code=dev_anum"linse" name="L873"> 873
algo)) {
 854      tef="+code=dev_a  t"lins" class="sref">res;
 828
 862        
 798
 795========<  - When;we get namerror afmpt receiv modN bytYle@dev:a slavo,vice as an i2c_adapter.
 792========<    "co&e isdno waye"osreport  methoN methoevice as an i2c_adapter.
 793========
 794========<  - When;we get n NAK afmpt transmitt modN bytYle"osa slavo,vice as an i2c_adapter.
 795========<    "co&e isdno waye"osreport  methoN metho ... or "oslet="comma" cl" ce as an i2c_adapter.
 796========<    cont muesexecut modthrmmestsof "cisd"> bi"ed messagY,==f" ce as an i2c_adapter.
 797========<    "cat class="comappropriate mesponstevice as an i2c_adapter.
 798========
 793========<  - When;tdriexamplt  methonum metho is="wosand;we sucter"fully "> pletYvice as an i2c_adapter.
 798
 795========<    d cond,==t class=unclearrwhe"co& "cat ihouldubrmmeported atNUce as an i2c_adapter.
 792========<    one (discard mo e" nus on "coms condsmessagY) or errnoNUce as an i2c_adapter.
 793========<====(discard mo e" nus on "comfirstsone)evice as an i2c_adapter.
 794========
);
 857    a>(&/a>(adap(adap ef="+code=dev_ama" claxf> ss=")elass="sref">algo)) {
NUDEBUGef="+code=dev_aDEBUG"lin name!\n");
 868      tef="+code=dev_a  t"lins" 0s_add_adapter  tef="+code=dev_a  t"lins<829"> 829stanumef="+code=dev_anum"lins_add_adapter  tef="+code=dev_a  t"lin++)elass="sref">algo)) {
dev_dbgcode=i2c_do_adddev_dbgvi="sss="sref">dev_warn(&/a>(adap->dev,  [ regid]  regic,mladr=0x regi02x,  method is deass="sref">algo)) {
 ================aclass="sref">dev,  868    msgsef="+code=dev_amsgsadap[ algo!\n"<  tef="+code=dev_a  t"lin]"sref">i2c_bus_tflagsef="+code=dev_aflags"lins&ref"_add_adapterI2C_M_RDef="+code=dev_aI2C_M_RD"linse" name="L873"> 873
                 ?=aclass="sref">dev,clasR,clasd is de :=aclass="sref">dev,clasW,clasd is de,=sref">i2c_adaptmsgsef="+code=dev_amsgsadap[ algo!\n"<  tef="+code=dev_a  t"lin]"sref">i2c_bus_tladr/a>(NUmsgsef="+code=dev_amsgsadap[ algo!\n"<  tef="+code=dev_a  t"lin]"sref">i2c_bus_tlenef="+code=dev_alenlass"e" name="L873"> 873
                 68"> 868    msgsef="+code=dev_amsgsadap[ algo!\n"<  tef="+code=dev_a  t"lin]"sref">i2c_bus_tflagsef="+code=dev_aflags"lins&ref"_add_adapterI2C_M_RECV_LE= -dev,metho+ method is de :=aclass="sref">dev,metho method is dess" class="sref">res;
 e" name="L845"> 845}
res;
);
 857    in_atomiccode=i2c_do_add_n_atomicvi="s) ||_add_adapter(rqs_disable/code=i2c_do_addirqs_disable/vi="s))elass="sref">algo)) {
  tef="+code=dev_a  t"lins" class="sref">re=adEXPORT_SYMaspan>, res;
unlike  tef="+code=dev_a  t"linse" name="L873"> 873
 862        
 ================866                r/a> = -res;
 } else lass="sref">algo)) {
         class="sref">re=adEXPORT_SYMaspan>, res;
 e" name="L845"> 845}
 834
 "L874"> 874  tef="+code=dev_a  t"lins" class="sref">re_a=ad ef="+code=dev_a_a=ad vi="sref">EXPORT_SYMaspan>, i2c_adaptmsgsef="+code=dev_amsgsadap,=29"> 829stanumef="+code=dev_anum"linss" class="sref">res;
re=adEXPORT_SYMaspan>, res;
res = 0;
 764        rtef="+code=dev_a  t"lins" class="sref">res;
algo)) {
 8s="sref">unlikdev_dbgcode=i2c_do_adddev_dbgvi="sss="sref">dev_warn(&/a>(adap->dev,  sdnot supporteder method is dess" class="sref">res;
 866                rOPNOTSUPP -res;
 845}
 845}
NUT_SYMBOL" claef="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL ef="+code=dev_a=ad vi="ss" class="sref">res;
);
 796
 797< BOL
 798< @class=:=Handlt "osslavo  treatssce as an i2c_adapter.
 793
 798
 795
 792
 793*ter driver model init */
 829staBOLi2c_adaptclass=href="+code=i2cclass=lass,=const=char="sref">i2c_adaptbufhref="+code=i2cbufadap,=="L829"> 829stacous=href="+code=i2ccous="linse" name="L873"> 873
 853{
 854      tef="+code=dev_a  t"lins" class="sref">res;
(strhref="+code=i2c_do_add_adalass="sss="e"sref">i2c_adaptaspan>, recoass=href="+code=i2cclass=lass" class="sref">adapres;
(strmsgcode=i2c_do_add_adamsgss="esref">i2c_adaptmsgef="+code=dev_amsgss="s" class="sref">res;
res;
 759msgef="+code=dev_amsgss=""sref">i2c_bus_tladr/a>(recoass=href="+code=i2cclass=lass" class="sref">adap(res;
 759msgef="+code=dev_amsgss=""sref">i2c_bus_tflagsef="+code=dev_aflags"lins" class="sref">recoass=href="+code=i2cclass=lass" class="sref">adapI2C_M_TE= -res;
msgef="+code=dev_amsgss=""sref">i2c_bus_tlenef="+code=dev_alenlasss" class="sref">recous=href="+code=i2ccous="lins" class="sref">res;
msgef="+code=dev_amsgss=""sref">i2c_bus_tbufhref="+code=i2cbufadaps" (char=")sref">i2c_bus_tbufhref="+code=i2cbufadaps" class="sref">res;
 834
        tef="+code=dev_a  t"lins" class="sref">re=ad ef="+code=dev_a=ad vi="sref">EXPORT_SYMaspan>, dev_warnres;
 816
 796
 798========< If e */yth mo w    ok (i.e. 1 msg transmitted), 866#bytYler driver model init */
 793========< transmitted, else error arn
 798
68"> 868      tef="+code=dev_a  t"lins"= 1se?=alass="sref">recous=href="+code=i2ccous="lin :=a"> 854      tef="+code=dev_a  t"lins" class="sref">res;
 845}
NUT_SYMBOL" claef="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOLres;
 834
 795
 796
 797< @class=:=Handlt "osslavo  treatssce as an i2c_adapter.
 798< @buf: Wco&e "ossto&e data reade@dev:slavossce as an i2c_adapter.
 793
 798
 795<=R66
 792
 829staBOLi2c_adaptclass=href="+code=i2cclass=lass,=char="sref">i2c_adaptbufhref="+code=i2cbufadap,=="L829"> 829stacous=href="+code=i2ccous="linse" name="L873"> 873
 853{
(strhref="+code=i2c_do_add_adalass="sss="e"sref">i2c_adaptaspan>, recoass=href="+code=i2cclass=lass" class="sref">adapres;
(strmsgcode=i2c_do_add_adamsgss="esref">i2c_adaptmsgef="+code=dev_amsgss="s" class="sref">res;
 854      tef="+code=dev_a  t"lins" class="sref">res;
 828
 759msgef="+code=dev_amsgss=""sref">i2c_bus_tladr/a>(recoass=href="+code=i2cclass=lass" class="sref">adap(res;
 759msgef="+code=dev_amsgss=""sref">i2c_bus_tflagsef="+code=dev_aflags"lins" class="sref">recoass=href="+code=i2cclass=lass" class="sref">adapI2C_M_TE= -res;
 759msgef="+code=dev_amsgss=""sref">i2c_bus_tflagsef="+code=dev_aflags"lins|" class="sref">reI2C_M_RDef="+code=dev_aI2C_M_RD"lins" class="sref">res;
msgef="+code=dev_amsgss=""sref">i2c_bus_tlenef="+code=dev_alenlasss" class="sref">recous=href="+code=i2ccous="lins" class="sref">res;
msgef="+code=dev_amsgss=""sref">i2c_bus_tbufhref="+code=i2cbufadaps" sref">i2c_bus_tbufhref="+code=i2cbufadaps" class="sref">res;
 834
        tef="+code=dev_a  t"lins" class="sref">re=ad ef="+code=dev_a=ad vi="sref">EXPORT_SYMaspan>, dev_warnres;
 816
 796
 798========< If e */yth mo w    ok (i.e. 1 msg received), 866#bytYl received,vice as an i2c_adapter.
 793========< else error arn
 798
68"> 868      tef="+code=dev_a  t"lins"= 1se?=alass="sref">recous=href="+code=i2ccous="lin :=a"> 854      tef="+code=dev_a  t"lins" class="sref">res;
 845}
NUT_SYMBOL" claef="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOLres;
 7954=====4=<    "co&e isdno waye"osrepo*---------  cla m scannnameas an i2a href4adapter.144i2cdel i3rn138="line" name="L796">4796========<    cont muesexecut* WHandadddwork="lin10-bit-  cla mes!a href4adapter.144i2cdel i3me="L816">.c#L787" id="L7813i2c>1384"line4 name="L797"> 797========4ers/i2c14i2c-core.c#L784" id="L7814i2c>1d744==t
144i2cdel i32c>147="li.
 793====4===< 49ref">res;
1392"line" name="L798"4 798<4a=========<    "co firstsmesc14i2c-core.c#L776" id="L7714i2c>147="line" n"L7913i2c>439="line" name="L795"> 794=4======<    d cond,==t class=u* Legacy de778" iprob----------,as anly0" levaL79"linSMBus. Tn>
=methodto&ea quick name="Ltdriicat "know2="liinSrupnsmitt24RFv_a b----------,as anly0" levaL79"linSMBus. Tns/i2c14i2c i2c_adapter.
138cagY balso irr77ersiblya b----------,as anly0" levaL79"linSMBus. TnPORT_SYMBOd mo e" nus on "comfirsts4ne)ev492c13i2c-core.c#L864" id="L8613name=-4}
ass=u7954874d="L0x30-0x37c>1380x50-0x5f="L796"> 796145in2c>ad. Also,/a>}
 7mef">r796"> 796 857    a4(&/a>494i2cdel i3rn138="linquick name="La>awass=llback "line id=2c>145in828" ica4i2coo If e */yth mo w    ok (i.e. 1 msg received)xf> ef="+c4de=dev_ama" claxf> ss=")e4ass="494i2cdel i3me="L816">.c#L787" iOn x86,794"> 794 796==t
 pletYvice as an i2c_a5ef">dev_wa5n(&/a>(4on PC hardwil  If e */yth mo w    ok (i.e. 1 msg received5 msgsef="+5ode=dev_amsgsadap[ algo!\5"50is=u16"lce as an i2c_adapter.
<1ad=ine" ed0ad 795<=R6652C_M_5ECV_LE"t  ici2c>1466ref="+code=EL781778" ip_4re.c#L782" id="L781778" ip_4;c#L874" id="L8713i2c>137="line" name="L794"> 794

(strclass=hr5ev,met5o+ method is de :=aclass=5sref"50lass=href="+code=i2cclass=lass,=char="sre5a>;
i2c_2c>1466ref="+code=Eerrs/i2c14i2c-coreerr}
 829sa hr id="L8713i2c>137="smbus_514iame="L794"> 794smbus_514icclass=lass" class="dumm,=sref">i2c_adapdumm, 857    a5=e" n50 name=e" name=class="sref">re=ad  tef="+5ode=d5v_a  tf="+code=adap" class="CONFIG_X href4adaptc_adapCONFIG_X hname=e" name=class="sref">re=ad;
5a href="d14i8eL794"> 794=======href="d14i8ers/i2c14i2c-cor=40x73ef="d1L8714i4"> 794========
1472"line" name=CLASS_HWMO9"> 759msgef="+cCLASS_HWMO9869"t=i2c_do_add_adapter(strclass=hr5name="L8735> 873
146="line" name="Lg fu_2c>132="liit,=sref">i2c_adapme="Lg fu_2c>132="liit,="L8714i2c>147="line" name="L834"> 834
1472"line" name=FUNC_* LUS_READ_BYTE_DATA"> 759msgef="+cFUNC_* LUS_READ_BYTE_DATA869"tt=i2c_do_add_adapter(strclass=hr5nmsgsef="+5nit */
res;
);hrefsmbus_e!\n="L8714i2c>147="line" name="L834"> 834
1472"line" n"L841">                 ?=aclorig_jiffire"lins"="+c* LUS_READ"> 759msgef="+c* LUS_READ ?=aclor=i2c_do_add_adapter(strclass=hr5n2sgsef="+56                r/a>5= - 759msgef="+c* LUS_BYTE_DATAi2c_adapdumm, 845}
    98 845}
EXPO5T_SYM51ev,metho method is dess" class="sref">res<5>res;
5a href="d14i3ers/i2c14i2c5core.5#L813" id="L81d 794=======href="d14i8ers/i2c14i2c-coL8714i~0x07)or=40x304i5e4"> 794=======href="d14i8ers/i2c14i2c-coL8714i~0x0f)or=40x50t=i2c_do_add_adapter(strclass=hr5nme="L845"5="+code=dev_a_a=adEXPORT_SYMf="d1L8714ic>146="line" name="Lg fu_2c>132="liit,=sref">i2c_adapme="Lg fu_2c>132="liit,="L8714i2c>147="line" name="L834"> 834
1472"line" name=FUNC_* LUS_QUICK"> 759msgef="+cFUNC_* LUS_QUICK869"tt=i2c_do_add_adapter(strclass=hr5n7e="L845"5e.c#L816" id="L8114i2c>1456"lin51e="L857"> 857    466ref="+code=Eerrs/i2c14i2c-coreerrres;
);hrefsmbus_e!\n="L8714i2c>147="line" name="L834"> 834
1472"line" n"L841">                 ?=aclorig_jiffire"lins"="+c* LUS_WRITE"> 759msgef="+c* LUS_WRITE ?=aclor=i2c_do_add_adapter(strclass=hr5n=========5i2c_do_add_adauned" rhref5"+ss=5sref">EXPORT_SYMaspan> class="core.c#L810" 466ref="+code=E="+c* LUS_QUICK"> 759msgef="+c* LUS_QUICK869"rig_jiffire"lins"NULv_a  t"lins" claNULv 845}
r5s5= 0;
i2c_adapme="Lg fu_2c>132="liit,="L8714i2c>147="line" name="L834"> 834
1472"line" name=FUNC_* LUS_READ_BYTE"> 759msgef="+cFUNC_* LUS_READ_BYTE869"tt=i2c_do_add_adapter(strclass=hr5141="line"5name=========866 764<5a>   5    rtef="+code=dev_a  t"lins" class=errs/i2c14i2c-coreerrres;
);hrefsmbus_e!\n="L8714i2c>147="line" name="L834"> 834
1472"line" n"L841">                 ?=aclorig_jiffire"lins"="+c* LUS_READ"> 759msgef="+c* LUS_READ ?=aclor=i2c_do_add_adapter(strclass=hr5"sss="sref5>dev_warn(&/a>(a class="core.c#L810" 466ref="+code=E="+c* LUS_BYTE"> 759msgef="+c* LUS_BYTEi2c_adapdumm, 845}
res;
 866             5  rOP52e="L869">         cla475ers/i2c14 33dev_warlins|" class="srdev_warl="L87i2c14i2c-core.c#L819" id="L8114i2c>1419"line" name=} else lass="sref">algo)) {
 8s="sref">unlikdev_dbgcode=i2c_do_adddev_dbgvi5="sref">re5;
dev,  sdnot supporteder meth5d1424ers/i5c14i2c-core.c#L824" id="L5214i252L813" id="L81    tef="+code=dev_a  t"lins"= 1se?=5code=EXPOR5_SYMBOL" class="sref">EXP5RT_SY52hname=e" name=class="sref">re=ad 857, re=ad
5a hre5="d142"t  ici2c>1466ref="+code=EL78177tect_=95re.c#L782" id="L78177tect_=95;c#L874" id="L8713i2c>137="L792"> 792
 792ef="d="L8314i2c>1438"line" name=i2c_do_a5tsss="sref5f="d143vers/i2c14i2c-core5c#L8353=adap" class="sref">a class="core.cc#L874" id="L8713i2c>137=">1438"re.c#L782" id="L78171438" init */
1438"re.c#L782" id="71438" init=i2c_do_add_adapter(strclass=hr5swrite, mu5= besless "can 64k r mce 5sg.le5 is=u1s/i2c14i2c-core.c#L818" id="L8114i2c5i2c_adapte5.
    c#L874" id="L8713i2c>137="board_infers/i2c13i2c-cor37="board_infecclass=lass" class="infers/i2c13i2c-cor3nfeccla1=e" name=class="sref">re=ad    c#L874" id="L8713i2c>137="line" name="L794"> 794id="L8614i2c>146href="+code=Esref">res;
 792ef="s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=Ei2c_do_add_adapter(strhref="+cod5de=i2c_ada5lass=lass="sref">i2c_adap5class53s" sref">i2c_2c>1466ref="+code=Ea href="d14i8ers/i2c14i2c-core.c#L868" id="L8temp"L792"> 792ef="s/i2c14i2c-core.c#L865ers/i2c14i2c-core.c#L869" id="L8614i2c>146="line" name=IL759"5">i2c_adap5bufhref="+code=i2cbufadap5=="L859"> 829stacous=href="+code=i2errs/i2c14i2c-coreerrre=adi25_adap5aspan>, =inreosane=954is vliid4i2c>146="line" name="L795"> 795<=R66;
 854      tef="+coerrs/i2c14i2c-coreerrres;
i2c_adapme="Lg fu_=95<_vliidit,="L8714i2c>147="line" ers/i2c14i2c-core.c#L869"tref="d1481ers/i2c14i2c-core.c#L781" 5d_adapter<5a>(strmsgcode=i2c_do_add_5damsg5s="esref">i2c_L7914i2c>140="lin#eerrs/i2c14i2c-coreerr);
i2542c14i2c-core.c#L810" 466ref="+code=Edev_warlins|" class="srdev_warl="L87i2c14i2c-core.c#L819" idid="L8614i2c>146href="+code=Eame=} else lass="sref">algo)) {
=79540x====add_> [ regid]  regin>);
recoa5s=hre54ref="+code=EAGAIN" s" class="c14i2c>147="line" ers/i2c14i2c-core.c#L869"tref="d1481ers/i2c14i2c-core.c#L781" 5d2c_adapte542" id="L8414i2c>1442"lin5" nam54e="L869">         cla,         tef="+code=dev_a  t"lins"= 1se?=5">i2c_bus_5bufhref="+code=i2cbufadap5" (ch54142="linclass="sref">NUT_SYMBOL" claef="5code=dev_a5 t"lins" class="sref">re=5d, 14y5in845146="line" name="L795"> 795<=R66, dev_warn140="lin#ene="Lg fu_=95<_bus,=sref">i2c_adapme="Lg fu_=95<_bus,="L8714i2c>147="line" naid="L8614i2c>146href="+code=Ere2c>1472"line" n"L841">                 ?=att=i2c_do_add_adapter(strclass=hr5i6ers/i2c15i2c-core.c#L846" id="L8415i2c>154ref">EXPORT_SYMaspan>, 1=e" name=class="sref">re=ad5#byt5ler driver model init */<5span>550pan>, =inreosan> 794}
/i2c144i2c>146="line" name="L795"> 795<=R66========5 transmitted, else error 5rnre.c#L782" id="L781778" ip_4;14i2c>147="line" naid="L8614i2c>146href="+code=Ere2c>1472"line" n"L841">                 ?=att=i2c_do_add_adapter(strclass=hr5d="L8514i25>145="line" name=86665"> 8655ref="+code=EAGAIN" s", 1=e" name=class="sref">re=ad=e" name=class="sref">re=ad132="4i2c>146="line" name="L795"> 795<=R66i2c_bus_5L" class="sref">EXPORT_SY5BOLi2c_bus_tbufhref="+memsodel init */i2c_bus_tbufhref="+infers/i2c13i2c-cor3nfecclasref">res;

i2c_bus_tbufhref="+errs/i2c14i2c-coreerrres;
1438"re.c#L782" id="71438" iniame=} else lass="sref"tectalgo)) {
;14i2c>147="linetemp"L792"> 792ef="def="d1475ers/i2c14 33infers/i2c13i2c-cor3nfecclatref="d1481ers/i2c14i2c-core.c#L781" 5e6ers/i2c15vedmodevice as an i2c_ada5ter.<558f">dev_warn140="lin#eerrs/i2c14i2c-coreerr);
r796"> 796
 7as hr94unlike  tef="+code=dev_a  t"linse"5osread, mu5= besless "can 64k r mce 5sg.le56=adap" class="sref">adapbus_tbufhref="+errs/i2c14i2c-coreerrdev
=e" name=class="sref">re=adi25_adap564pan>, unlike  tef="+code=dev_a  t"linse"5o>i2c_bus_5bufhref="+code=i2cbufadap5=="L856L813" id="L81dres;
re.c#L782" id="typ>ccla[0]srre_adapterI2C_M_RDef="+c\0de=dev_aI2C_span>);
i25_adap56ef">EXPORT_SYMaspan>, algo)) {
dev_dbgcode=i2c_do_adddev_dbgvi="sss="s5s;
 857    in_atomic2vers/i2c14i2c-core.c#L820noc14i22ss=u0x====a_> [ regid]  regief">res;
1438"re.c#L782" id="71438" iniame=} else lass="sref1438"re.c#L782" id="71438" inisref">res;
<14i2re.c#L782" id="14i2ef="d="L8314i2c>1438"line" name=i2c_do_a5i2c_adaptm5gef="+code=dev_amsgss="s"5class56ref">EXPORT_SYMaspan> class="14i2c>147="line" ers/i2c14i2c-core.c#L869"tref="d1481ers/i2c14i2c-core.c#L781" 5-core.c#L857" id="L8614i2c>146="line5 name56 0;
i257   rtef="+code=dev_a L8614i2c>146="line" name="L792"> 792
recoa5s=hre5="+codef="d1481ers/i2c14i2c-core.c#L781" 5=n i2c_ada514i2c>1471"line" name="L759"> 757ref="+code=EAGAIN" s"ecvcode=i2c_do_add_adama"D7tecta hrine" edin2canti  cot de77dama5ss="sref">unlike  tef="+code=dev_a  t"linse"5c-core.c#L572" id="L8714i2c>1472"lin5" nam57e="L869">         cla475ers/i2c14 33dev_f">res;
algo)) {
135="line" n     cla475ers/i2c14 33infers/i2c13i2c-cor3nfecclasref">res;
re.c#L782" id="typ>cclaief">res;
res;
52c_bus_tbufhref="+code=i25bufad57L813" id="L8114i2c>141="line" name="ef="d14i3ers/i2c14i2c-core.c#L8sref">res;
;14i2c>147="line" naid="L8614i2c>146href="+code=Eref="d1475ers/i2c14 33infers/i2c13i2c-cor3nfecclatref="d1481ers/i2c14i2c-core.c#L781" 5code=dev_a5 t"lins" class="sref">re=5d 857    in_atomici2c>140="lin#elist_=95_tail4i3ers/i2c14i2clist_=95_tail9ers/i2c14i2c-core.c#L819="+codd lasss" class="sref">res;
140="77tectd=de=Eref="d1475ers/i2c14 33>1438"re.c#L782" id="71438" iniame=} else lass="sre"sref"id lasss" class="sref"icclatref="d1481ers/i2c14i2c-core.c#L781" 5c2c_adaptm5i2c-core.c#L776" id="L7715i2c>157ref">EXPORT_SYMaspan>98 845}
algo)) {
#5ytYl received,vice as an 52c_ad58i2c-core.c#L799" id="L7914i2c>1409"li475ers/i2c14 33infers/i2c13i2c-cor3nfecclasref">res;
re.c#L782" id="typ>cclaief">res;
res;
 795========< else error 5rn65"> 8658ref="+code=EA, 1=e" name=class="sref">re=adNUT_SYMBOL" claef="+code=5XPORT_SYMB5L" class="sref">EXPORT_SY5BOL1466ref="+code=EL78177tectre.c#L782" id="L78177tect;c#L874" id="L8713i2c>137="line" name="L794"> 794id="L8614i2c>146href="+code=E,cc#L874" id="L8713i2c>137=">1438"re.c#L782" id="L78171438" init */
1438"re.c#L782" id="71438" init=i2c_do_add_adapter(strclass=hr54==t
<5 href4adapter.5 hnames/i2c14i2c-core.c#L818" id="L8114i2c5meas an i25 href4adapter.58e="L857"> 857" id=">stanumefssart"model init */_listef="d14i8ers/i2c14i/a>_listc#L8ref="d1481ers/i2c14i2c-core.c#L781" 5  cla mes!5 href4adapter.58span>,  792
 792ef="ref="d1481ers/i2c14i2c-core.c#L781" 5 n>
58 href="d14i8eLc>1466ref="+code=EL 792res;
1=e" name=class="sref">re=ad========< else error 5rn1466ref="+code=Eef="_i="L7914i2c>140="ef="_i=c#L8sref">res;
140="hrefef="+co_i=;14i2c>147="line" naid="L8614i2c>146href="+code=Etref="d1481ers/i2c14i2c-core.c#L781" 5====4===< 59ref">res;
_listef="d14i8ers/i2c14i/a>_listc#L8sref">res;
1438"re.c#L782" id="71438" iniame=} else lass="srepa5_listef="d14i8ers/i2c14i/a>_listc#L8ref="d1481ers/i2c14i2c-core.c#L781" 5n>
    d)) {
4i5eyed" rhref="+codpa5_listef="d14i8ers/i2c14i/a>_listc#L8t=i2c_do_add_adapter(strclass=hr5ns/i2c14i25 i2c_adapter.
1=e" name=class="sref">re=adNUT_SYMBOL" claef="54ers/i2c1352c-core.c#L794" id="L791352c>13596pan>,  7L79t dee=i2ce. doame="match ss="sref">unlike  tef="+code=dev_a  t"linse"54eas an i25name="L857"> 857    a5(&/a>59ef">dev_warn147="line" naid="L8614i2c>146href="+code=E/
1472"line" n>1438"re.c#L782" id="71438" iniame=} else lass="sre"sdrid lasss" class="ssss id=tt=i2c_do_add_adapter(strclass=hr5xf> ef="+c5de=dev_ama" claxf> ss=")e5ass="59ref">EXPORT_SYMaspan>, 1=e" name=class="sref">re=ad==t
<5tef="+code=dev_a  t"lins"50s_ad598" id="L8314i2c>1438"line" name=i2c_do_a6ef">dev_wa6n(&/a>(, p a temporary L792"> "lihelp 77tect79a="back ss="sref">unlike  tef="+code=dev_a  t"linse"6 msgsef="+6ode=dev_amsgsadap[ algo!\6"60"+code=i2cclass=lass" class=temp"L792"> 792ef="sref">res;
;cizeof;c#L874" id="L8713i2c>137="L792"> 792res;
    d 792ef="t=i2c_do_add_adapter(strclass=hr6dev_aflags6lins&ref"_add_adapter62C_M_60e="L869">         cla, dev,met6o+ method is de :=aclass=6sref"604+code=i2cclass=lass" class=temp"L792"> 792ef="s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=Eore.c#L868" id="L865" id="L8614i2c>146href="+code=Ei2c_do_add_adapter(strhref="+cod6a>;
NUT_SYMBOL" claef="6ame="L845"6 845}
 8291code=dev_amsgss=pa5_listef="d14i8ers/i2c14i/a>_listc#L8[bus_tbufhref="+i 792 759msgef="+cCLIENT_ENDde=Ei1466ref="+code=EL 792 857    a6=e" n60e="L857"> 857    466ref="+code=Edev_f">res;
algo)) {
ry ss=u79="+co4 claxd,dev_dbgcode=i2c_do_adddev_dbgvi="sss="s6==========6==add_adapter  tef="+6ode=d60ref">EXPORT_SYMaspan> class="12vers/i2c14i2c-core.c#L820c14i40x====add_> [ regid]  regi1466ref="+code=Eef="_i="L7914i2c>140="ef="_i=c#L8re2c>1472"line" n"L84/a>_listef="d14i8ers/i2c14i/a>_listc#L8[bus_tbufhref="+i 792;
60 href="d14i8ers/i2c14es=lass" class=temp"L792"> 792ef="s/i2c14i2c-core.c#L865href="d14i8ers/i2c14i2c-core.c#L868" id="L865er/a>_listef="d14i8ers/i2c14i/a>_listc#L8[bus_tbufhref="+i 792res;
re.c#L782" id="L78177tect_=95;es=lass" class=temp"L792"> 792ef="ief">res;
1438"re.c#L782" id="71438" initref="d1481ers/i2c14i2c-core.c#L781" 6nmsgsef="+6nit */
140="lin#eunlikel,=sref">i2c_adapunlikel,;es=lass" class=errs/i2c14i2c-coreerr(strclass=hr6n2sgsef="+66                r/a>6= -     -,met6d" rhref="+ss="sref">EXPO6T_SYM61inclass="sref">NUT_SYMBOL" claef="+code=6>res;
6a href="d14i3ers/i2c14i2c6core.61s" sref">i2c_bus_tbufhref="+kfre>re.c#L782" id="kfre>;es=lass" class=temp"L792"> 792ef="tref="d1481ers/i2c14i2c-core.c#L781" 6nme="L845"6="+code=dev_a_a=adEXPORT_SY, res;
r6s6= 0;
<2c>1466ref="+code=EL7814_2c>1_quick_c>14re.c#L782" id="L7814_2c>1_quick_c>14;c#L874" id="L8713i2c>137="line" name="L794"> 794"L7914i2c>140="ef="ef="ie>stanumefssart"a>
(strclass=hr6141="line"6name=========866 764<6a>   6    rts/i2c14i2c-core.c#L818" id="L8114i2c6"sss="sref6>dev_warn(&/a>(137="smbus_e!\n");hrefsmbus_e!\n="L8714i2c>147="line" name="L834"> 834
1472"line" n"L841">                 ?=aclorig_jiffire"lins"="+c* LUS_READ"> 759msgef="+c* LUS_READ ?=aclor=i2c_do_add_adapter(strclass=hr6d is dess"6class="sref">res;
i2c_bus_tbufhref="+="+c* LUS_QUICK"> 759msgef="+c* LUS_QUICK869"rig_jiffire"lins"NULv_a  t"lins" claNULv1=e" name=class="sref">re=ad 866             6  rOP62TSUPP -re6;
res_GPv_a  t"lins" class="sref">res_GPv="L8714i2c>147="lineL7814_2c>1_quick_c>14re.c#L782" id="L7814_2c>1_quick_c>14tref="d1481ers/i2c14i2c-core.c#L781" 6d1424ers/i6c14i2c-core.c#L824" id="L6214i262142="linclass="sref">NUT_SYMBOL" claef="6code=EXPOR6_SYMBOL" class="sref">EXP6RT_SY62hnamef="+code=adaps" class="sreL792"> 792NUT_SYMBOL" claef="6c7e="L845"6s/i2c14i2c-core.c#L825" i6="L8262e="L8e=adaps" class="srenew_4d_77dama 792d_77dama;c#L874" id="L8713i2c>137="line" name="L794"> 794"L7914i2c>140="ef="ef="ilinclass="sref">NUT_SYMBOL" claef="6c=========6
EXPORT_SYMaspan> classc#L874" id="L8713i2c>137="board_infers/i2c13i2c-cor37="board_infecclasmodel init */NUT_SYMBOL" claef="6c9========6itdmodevice as an i2c_ada6ter.<62 href="d14i8ers/i2c14i2c-co>stanumefssart"" id="model init */NUT_SYMBOL" claef="6treatssce 6s an i2c_adapter.
6a hre63i2c-core.c#L799" id="L7914i2c>1(model init */re.c#L782" id="4);c#L874" id="L8713i2c>137="line" name="L794"> 794stanumefssart"a>
(strclass=hr6tsss="sref6f="d143vers/i2c14i2c-core6c#L8363=adaps/i2c14i2c-core.c#L818" id="L8114i2c6swrite, mu6= besless "can 64k r mce 6sg.le632="L869">    dc>1466ref="+code=EL 792
=e" name=class="sref">re=ad    dre=adi2c_adap6class63L813" id="L8114i2c>141="line" name="4re.c#L782" id="4sref">res;
re.c#L782" id="L781778" ip_4ref="d1481ers/i2c14i2c-core.c#L781" 6iode=EXPOR6bufhref="+code=i2cbufadap6=="L863hname=e" name=class="sref">re=ad 857ss=urbus_tbufhref="+i 7921code=dev_amsgss=pa5<_listef="d14i8ers/i2c14i_listc#L8[bus_tbufhref="+i 792 759msgef="+cCLIENT_ENDde=Ei1466ref="+code=EL 792i26_adap63ref">EXPORT_SYMaspan>ecvcode=i2c_do_add_adama"Cg fu5a954vliidit, ss="sref">unlike  tef="+code=dev_a  t"linse"6s;
140="lin#ene="Lg fu_=95<_vliidit,=sref">i2c_adapme="Lg fu_=95<_vliidit,="L8714i2c>147="line" er_listef="d14i8ers/i2c14i_listc#L8[bus_tbufhref="+i 792algo)) {
========<dev_dbgcode=i2c_do_adddev_dbgvi="sss="s6 759ms6ef="+code=dev_amsgss=""sr6f">i2642c14i2c-core.c#L810" 799" id="L7914i2c42vers/i2c14i2c-core.c#L8200x====add_> [ regid]  regi1466ref="+code=Eefer_listef="d14i8ers/i2c14i_listc#L8[bus_tbufhref="+i 792recoa6s=hre64ref="+code=EAGAIN" s" class="" itinueref="d1481ers/i2c14i2c-core.c#L781" 6 2c_adapte642" id="L8414i2c>1442"lin6" nam64e="L869">         cla -NUT_SYMBOL" claef="+code=6">i2c_bus_6bufhref="+code=i2cbufadap6" (ch64L813" id="L8114i2c>141cvcode=i2c_do_add_adama"Cg fu5a954availabilit, ss="sref">unlike  tef="+code=dev_a  t"linse"6code=dev_a6 t"lins" class="sref">re=6di2c_adapme="Lg fu_=95<_bus,="L8714i2c>147="line" name="L834"> 834
1472"line" n"L84_listef="d14i8ers/i2c14i_listc#L8[bus_tbufhref="+i 792 857    in_atomici2c>140="lin#edev_f">res;
algo)) {
EXPORT_SYMaspan>99" id="L7914i2c42vers/i2c14i2c-core.c#L820use,ame="4 [ regid]  regi1466ref="+code=Eefer_listef="d14i8ers/i2c14i_listc#L8[bus_tbufhref="+i 792;
#byt6ler driver model init */<6span>65i2c-core.c#L799" id=" -========6 transmitted, else error 6rn66"> 8665ref="+code=EAGAIN" s"1cvcode=i2c_do_add_adama"Tes========<<===ponsiven/a>4i2c>146="line" name="L795"> 795<=R66recous=href="+code=i2cco6s="li65e="L869">         claL7914i2c>140="lin#e4re.c#L782" id="4714i2c>147="line" name="L834"> 834
1472"line" n"L84_listef="d14i8ers/i2c14i_listc#L8[bus_tbufhref="+i 792 795<=R66i2c_bus_6L" class="sref">EXPORT_SY6BOLre=ad
dev_warn140="lin#epa5<_listef="d14i8ers/i2c14i_listc#L8[bus_tbufhref="+i 792 759msgef="+cCLIENT_ENDde=E" s/i2c14i2c-core.c#L818" id="L8114i2c6e6ers/i2c16vedmodevice as an i2c_ada6ter.<65ref">EXPORT_SYMaspan>ei2c>140="lin#edev_f">res;
algo)) {
 8s="sref">unlikdev_dbgcode=i2c_do_adddev_dbgvi6o  treatss6e as an i2c_adapter.
1NULv_a  t"lins" claNULv

    dapter. id="L8713i2c>137="new_77dama 792;14i2c>147="line" name="L834"> 834
1472"line" ninfers/i2c13i2c-cor3nfecclatref="d1481ers/i2c14i2c-core.c#L781" 6f="+code=i6c_adaclass=lass="sref">i26_adap664pan>    tef="+code=dev_a  t"lins"= 1se?=6o>i2c_bus_6bufhref="+code=i2cbufadap6=="L866L813">res_GPv_a  t"lins" class="sref">res_GPv="L8714i2c>147="lineL781new_4d_77dama 792d_77damatref="d1481ers/i2c14i2c-core.c#L781" 6ff="d1454e6_adalass="sss="e"sref">i26_adap66hname=e" name=class="sref">re=ad;
 794get"line" name="L794"> 794get"line" n="L87dc>1466ref="+code=Enname="L794"> 794nL869"t=i2c_do_add_adapter(strclass=hr6i2c_adaptm6gef="+code=dev_amsgss="s"6class66ref">s/i2c14i2c-core.c#L818" id="L8114i2c6-core.c#L867" id="L8614i2c>146="line6 name66 0;
 794id="L8614i2c>146href="+code=Eref="d1481ers/i2c14i2c-core.c#L781" 6 759ms6ef="+code=dev_amsgss=""sr6f">i267   rtef="d1481ers/i2c14i2c-core.c#L781" 6 sread, mu6"lins" class="sref">recoa6s=hre67"+code=i2cclass=lass" class=mutex_lock"L8614i2c>146hrmutex_lock9ers/i2c14i2c-core.c#L819.c#L_lock"L8614i2c>146hr.c#L_locktref="d1481ers/i2c14i2c-core.c#L781" 6=n i2c_ada614i2c>1471"line" name="L769"> 767msgef="+code=dev_amsgss=65" id="L8614i2c>146href="+code=Eore.c#L868" id="L8i4i_fin4re.c#L782" id="L4i_fin49ers/i2c14i2c-core.c#L819 794nL869"tref="d1481ers/i2c14i2c-core.c#L781" 6=ass="sref672" id="L8714i2c>1472"lin6" nam67e="L869">    d146hrtry_module>get;14i2c>147="line" naid="L8614i2c>146href="+code=Eame=} else lass="sreownd="L8614i2c>146hrownd=869"tt=i2c_do_add_adapter(strclass=hr614i2c-core6c#L873" id="L8714i2c>14736line"67L8513i2c>135="line" node=dev_amsgss=65" id="L8614i2c>146href="+code=Eore.c#L868" id="L8NULv_a  t"lins" claNULv62c_bus_tbufhref="+code=i26bufad67142="linclass="sref">NUT_SYMBOL" claef="6code=dev_a6 t"lins" class="sref">re=6di2c_bus_tbufhref="+mutex_unlock"L8614i2c>146hrmutex_unlock9ers/i2c14i2c-core.c#L819.c#L_lock"L8614i2c>146hr.c#L_locktref="d1481ers/i2c14i2c-core.c#L781" 6=;
,  857, 146href="+code=Eref="d1481ers/i2c14i2c-core.c#L781" 6 2c_adaptm6i2c-core.c#L776" id="L7716i2c>167c#L82    tef="+code=dev_a  t"lins"= 1se?=6an>
res_a  t"lins" class="sref">res="L8714i2c>147="lineL781get"line" name="L794"> 794get"line" n="L8tref="d1481ers/i2c14i2c-core.c#L781" 6, 866#6ytYl received,vice as an 62c_ad68   rtef="d1481ers/i2c14i2c-core.c#L781" 6"L793"> 796========< else error 6rn 7944ut"line" n="L87c#L874" id="L8713i2c>137="line" name="L794"> 794"L7914i2c>140="ef="ef="t=i2c_do_add_adapter(strclass=hr6d="L7814i26>148="line" name=86666"> 8668is=u1s/i2c14i2c-core.c#L818" id="L8114i2c6lass="sref6>recous=href="+code=i2cco6s="li683" sref">i2c_bus_tbufhref="+module>4ut"L8614i2c>146hrmodule>4ut;14i2c>147="line" name="L834"> 834
146hrownd=869"tref="d1481ers/i2c14i2c-core.c#L781" 6,4i2c-core6-core.c#L783" id="L7814i26>1483684pan>    tef="+code=dev_a  t"lins"= 1se?=6XPORT_SYMB6L" class="sref">EXPORT_SY6BOLres_a  t"lins" class="sref">res="L8714i2c>147="lineL7814ut"line" name="L794"> 7944ut"line" n="L8tref="d1481ers/i2c14i2c-core.c#L781" 6,ode=dev_a6 href4adapter.68hname=e" name=class="sref">re=ad68e="L81cvcode=i2c_do_add_adama"The SMBus part>4i2c>146="line" name="L795"> 795<=R6668sref">res;
 794POLY" sref">(0x1070Usmlt;mlt; 3t=i2c_do_add_adapter(strclass=hr6L7813i2c796========< else error 6rn 794uref">Ei2c-core.c#L819.rc8ame="L794"> 794.rc8="L8714i2c>147="lineu="+code=dev"> 794uref">EX else lass="srefataalgo)) {
res;
    dc>1466ref="+code=EL 792
=e" name=class="sref">re=ad
1code=dev_amsgss=i 792(strclass=hr6=ode=dev_a62c-core.c#L794" id="L791362c>1369i2c-core.c#L794" id="ef">i2c_bus_tbufhref="+fataalgo)) {
res;
ataalgo)) {
 794POLY" srref="d1481ers/i2c14i2c-core.c#L781" 6neas an i26name="L857"> 857    a6(&/a>69e="L857"> 857    466ref="+code=Edataalgo)) {
res;
ataalgo)) {
 ss=")e6ass="69ref">EXPORT_S    tef="+code=dev_a  t"lins"= 1se?=64==t
<6tef="+code=dev_a  t"lins"60s_ad69 0;
 794uref">)rode=dev_amsgss=fataalgo)) {
dev_wa7n(&/a>(    tef="+code=dev_a  t"lins"= 1se?=7 msgsef="+7ode=dev_amsgsadap[ algo!\7"70"+codef="d1481ers/i2c14i2c-core.c#L781" 7 2sgsef="+7o2c-core.c#L776" id="L7717odd l702="L81cvcode=i2c_do_add_adama"Incredd_aal CRC8 oi2c couc>1bytes5in8sane=rray podc>ed "liby p4i2c>146="line" name="L795"> 795<=R6672C_M_70e="L8"t  icibus_tbufhref="+u8ame="L794"> 794uref">Ei2c-core.c#L819irefsmbus_pec 792 794uref">Ei2c-core.c#L819.rcame="L794"> 794.rc1472"line" nu8ame="L794"> 794uref">Emodel init */146hrcize_tef">Ei2c-core.c#L819.ouc>"L8614i2c>146hr.cu">ef="t=i2c_do_add_adapter(strclass=hr7ev,met7o+ method is de :=aclass=7sref"704+cods/i2c14i2c-core.c#L818" id="L8114i2c7a>;
i2c_2c>1466ref="+code=EL 792}
re=ad 857    a7=e" n70e="L857"> 857ss=urbus_tbufhref="+i 7921code=dev_amsgss=i 792"L8614i2c>146hr.cu">ef="i1466ref="+code=EL 792re=ad ss=")e7ode=d70ref">EXPORT_SYMaspan>i2c-core.c#L819.rcame="L794"> 794.rcres;
 794.rc8="L8714i2c>140="lin#eercame="L794"> 794.rc;
70 0;
 794.rc    tef="+code=dev_a  t"lins"= 1se?=7nmsgsef="+7nit */
========<, which i<<==asonabl22ss=uSMBus i2c>146="line" name="L795"> 795<=R66 794uref">Ei2c-core.c#L819irefsmbus_msg_pec 792 794uref">Ei2c-core.c#L819pec 792Emodel init */"=e" name=class="sref">re=ad,met7d" rhref="+ss="sref">EXPO7T_SYM714+cods/i2c14i2c-core.c#L818" id="L8114i2c7>res;
7a href="d14i3ers/i2c14i2c7core.71s" sref">i2c_bcvcode=i2c_do_add_adama"The ======< fird="m2c>146="line" name="L795"> 795<=R66i2c_bus_tbufhref="+u8ame="L794"> 794uref">Ei2c-core.c#L81965href="d14i8ers/i2c14i2c-core714i2c>147="linemsg 792s/i2c14i2c-core.c#L865href="d14i8ers/i2c14i2c-comlt;mlt; 1) | !!;14i2c>147="linemsg 792s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef=""L8714i14i2c-core.c#L8="+cM_RD"> 759msgef="+cM_RD="L8tref="d1481ers/i2c14i2c-core.c#L781" 7n7e="L845"7e.c#L816" id="L8114i2c>1476"lin717" sref">i2c_bus_tbufhref="+pec 792res;
                 ?=acl1tref="d1481ers/i2c14i2c-core.c#L781" 7n8e="L845"7i2c_do_add_adauned" rhref7"+ss=71sref">res;
r7s719" sref">i2c_bcvcode=i2c_do_add_adama"The  ata buff2c follows i2c>146="line" name="L795"> 795<=R66 764<7a>   7200;
s/i2c14i2c-core.c#L8buf 792s/i2c14i2c-core.c#L8lelins|" class="srlel="L8tref="d1481ers/i2c14i2c-core.c#L781" 7"sss="sref7>dev_warn(&/a>(res;
 866             7  rOP72TSUPPbcvcode=i2c_do_add_adama"Used ss=uwrite only transacta hs i2c>146="line" name="L795"> 795<=R66,met7;
Emodel init */"=e" name=class="sref">re=adEXP7RT_SY726" sref">i2c_bus_tbufhref="+msg 792s/i2c14i2c-core.c#L8buf 792s/i2c14i2c-core.c#L8lelins|" class="srlel="L8]sref">res;
"ref="d1481ers/i2c14i2c-core.c#L781" 7"7e="L845"7s/i2c14i2c-core.c#L825" i7="L82727" sref">i2c_bus_tbufhref="+msg 792s/i2c14i2c-core.c#L8lelins|" class="srlel="L8++ref="d1481ers/i2c14i2c-core.c#L781" 7"8e="L845"7

7a hre73" id="L8514i2c>145="line" nma"R 146="line" name="L795"> 795<=R66145="line" naaaI79t dre wase=4write bess=e hr9414 (most79ases) we need "litakcot dc>146="line" name="L795"> 795<=R66.c>146="line" name="L795"> 795<=R66
146="line" name="L795"> 795<=R66,met7, or else "comnumbersof b7tYlew734="L8bcvcode=i2c_do_add_adaaaam==unlike  tef="+code=dev_a  t"linse"7a1424ers/i7lass=lass="sref">i2c_adap7class73 clar"t  ici2c>1466ref="+code=EL781smbus_Lg fu_pec 792 794uref">Ei2c-core.c#L819.pec 792Emodel init */"=e" name=class="sref">re=adi2c_bus_tbufhref="+u8ame="L794"> 794uref">Ei2c-core.c#L819rpec 792res;
s/i2c14i2c-core.c#L8buf 792s/i2c14i2c-core.c#L8lelins|" class="srlel="L8]ref="d1481ers/i2c14i2c-core.c#L781" 7=i2c_do_ad7_adalass="sss="e"sref">i27_adap73ref">EXPORT_Si2c-core.c#L819.pec 792res;
"ref="d1481ers/i2c14i2c-core.c#L781" 7s;
(strmsgcode=i2c_do_add_7damsg74i2c-core.c#L7di2742c14i2c-core.c#L810" 14i2c>147="linepr_debug 792 [ regid]  regin>);
recoa7s=hre74ref="+code=EAGAIN" s" class="ode=dev_amsgss=rpec 792         cla, 135=    tef="+code=dev_a  t"lins"= 1se?=7">i2c_bus_7bufhref="+code=i2cbufadap7" (ch74L813" id="L81, 1=e" name=class="sref">re=adre=7d, "L8514i2c>145="line" nma*="sref">unlike  tef="+code=dev_a  t"linse"7 ;
unlike  tef="+code=dev_a  t"linse"766#byt7ler driver model init */<7span>75" id="L8514i2c>145="line" na* @ model: Handle "lisla"+ 77damaunlike  tef="+code=dev_a  t"linse"76759ms7 transmitted, else error 7rn145="line" na*="sref">unlike  tef="+code=dev_a  t"linse"7d="L8514i27>145="line" name=86667"> 86752="L81cvcode=i2c_do_add_adaaa"Th94neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"7d2c_adapte7>recous=href="+code=i2cco7s="li75TSUPPbcvcode=i2c_do_add_adaa*>98146="line" name="L795"> 795<=R66unlike  tef="+code=dev_a  t"linse"7a>i2c_bus_7L" class="sref">EXPORT_SY7BOL146hrc32="L86f">res;
14_byte 79214_byte="L87" id="f="+code=adaps" class="sreL792"> 792
dev_warnres;
)) {
res;
)) {
re=adEXPORT_S2c>1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad;


re.c#L782" id=""t  u>ef="sref">res;
);hrefsmbus_e!\n="L8714i2c>147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
 759msgef="+c* LUS_READ ?=aclor=i2c_do_add_adapter(strclass=hr7an i2c_ada7ter.
 759msgef="+c* LUS_BYTE="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=ad    dapter.714i2c>147="line"t  u>re.c#L782" id=""t  u>ef="smlt; 0" ?1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="s:6f">res;
)) {
re=adi27_adap764pan>    tef="+code=dev_a  t"lins"= 1se?=7o>i2c_bus_7bufhref="+code=i2cbufadap7=="L876L813">res 792res="L8714i2c>147="lineL781smbus_c>14_byte 79214_byte="L8t1=e" name=class="sref">re=adi27_adap76hname=e" name=class="sref">re=ad;
unlike  tef="+code=dev_a  t"linse"7i2c_adaptm7gef="+code=dev_amsgss="s"7class76ref">"L8514i2c>145="line" na* irefsmbus_write_byte -uSMBus [ regisend byte[ regi"4unlike  tef="+code=dev_a  t"linse"7-core.c#L877" id="L8614i2c>146="line7 name76 hrefbcvcode=i2c_do_add_adaa* @ model: Handle "lisla"+ 77damaunlike  tef="+code=dev_a  t"linse"7 759ms7ef="+code=dev_amsgss=""sr7f">i277" id="L8514i2c>145="line" na* @valu1: Byte "libe s2">unlike  tef="+code=dev_a  t"linse"7 sread, mu7"lins" class="sref">recoa7s=hre77=adap"L8514i2c>145="line" na*="sref">unlike  tef="+code=dev_a  t"linse"7=n i2c_ada714i2c>1471"line" name="L779"> 7772="L81cvcode=i2c_do_add_adaaa"Th94neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"7=ass="sref772" id="L8714i2c>1472"lin7" nam77TSUPPbcvcode=i2c_do_add_adaa*>98146="line" name="L795"> 795<=R66unlike  tef="+code=dev_a  t"linse"7s=""sref">72c_bus_tbufhref="+code=i27bufad77L813">146hrc32="L86f">res;
 792
 794uref">E2c>1472"line" nvalu1ame="L794"> 794valu1c#L8t=i2c_do_add_adapter(strclass=hr7code=dev_a7 t"lins" class="sref">re=7d 857, 147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
EXPORT_SYMaspan>99" id="L7914i14i2c-core.c#L8="+c* LUS_WRITE"> 759msgef="+c* LUS_WRITE ?=aclg_jiffire"lins"valu1ame="L794"> 794valu1c#L8rig_jiffire"lins"="+c* LUS_BYTE"> 759msgef="+c* LUS_BYTE="L8,cg_jiffire"lins"NULv_a  t"lins" claNULvre=ad
#7ytYl received,vice as an 72c_ad78   rt>res 792res="L8714i2c>147="lineL781smbus_write_byte 792re=ad 797========< else error 7rn67"> 86782="L81cvcode=i2c_do_add_adama*="sref">unlike  tef="+code=dev_a  t"linse"7lass="sref7>recous=href="+code=i2cco7s="li78TSUPPbcvcode=i2c_do_add_adaa*>irefsmbus_c>14_byte_fata -uSMBus [ regiread byte[ regi"4unlike  tef="+code=dev_a  t"linse"7,4i2c-core7-core.c#L783" id="L7814i27>1483784="L8bcvcode=i2c_do_add_adaas @ model: Handle "lisla"+ 77damaunlike  tef="+code=dev_a  t"linse"7XPORT_SYMB7L" class="sref">EXPORT_SY7BOLerp, unlike  tef="+code=dev_a  t"linse"7Xode=dev_a7 href4adapter.78hname"L8514i2c>145="line" na*="sref">unlike  tef="+code=dev_a  t"linse"7meas an i27 href4adapter.78e="L81cvcode=i2c_do_add_adaaa"Th94neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"7  cla mes!7 href4adapter.78ref">"L8514i2c>145="line" na* 98146="line" name="L795"> 795<=R66
78 hrefbcvcode=i2c_do_add_adaa*s="sref">unlike  tef="+code=dev_a  t"linse"7L7813i2c797========< else error 7rn146hrc32="L86f">res;
14_byte_fataalgo)) {
14_byte_fata="L87" id="f="+code=adaps" class="sreL792"> 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8t=i2c_do_add_adapter(strclass=hr7====4===< 79ref">res;
    un2="4f">res;
)) {
res;
)) {
re=ad
    dc>1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad
NUT_SYMBOL" claef="+code=7nPORT_SYMB7d mo e" nus on "comfirsts7ne)ev79L813" id="L81466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="sref">res;
);hrefsmbus_e!\n="L8714i2c>147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
i2c_"L7914i214i2c-core.c#L8="+c* LUS_READ"> 759msgef="+c* LUS_READ ?=acl2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
 857    a7(&/a>79e="L857"> 857     class=""L7914i214i2c-core.c#L8="+c* LUS_BYTE_DATA"> 759msgef="+c* LUS_BYTE_DATA="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=ad ss=")e7ass="79ref">EXPORT_Sdapter.714i2c>147="line"t  u>re.c#L782" id=""t  u>ef="smlt; 0" ?1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="s:6f">res;
)) {
re=ad==t
<7tef="+code=dev_a  t"lins"70s_ad79 href    tef="+code=dev_a  t"lins"= 1se?=8ef">dev_wa8n(&/a>(res 792res="L8714i2c>147="lineL781smbus_c>14_byte_fataalgo)) {
14_byte_fata="L8t1=e" name=class="sref">re=adunlike  tef="+code=dev_a  t"linse"8dev_aflags8lins&ref"_add_adapter82C_M_80TSUPPbcvcode=i2c_do_add_adaa*>irefsmbus_write_byte_fata -uSMBus [ regiwrite byte[ regi"4unlike  tef="+code=dev_a  t"linse"8ev,met8o+ method is de :=aclass=8sref"804="L8bcvcode=i2c_do_add_adaas @ model: Handle "lisla"+ 77damaunlike  tef="+code=dev_a  t"linse"8a>;
erp, unlike  tef="+code=dev_a  t"linse"8ame="L845"8 845}
145="line" na* @valu1: Byte bewrittel="sref">unlike  tef="+code=dev_a  t"linse"8a7e="L845"8 ame="L857"> 857    a8=e" n80e="L81cvcode=i2c_do_add_adaaa="sref">unlike  tef="+code=dev_a  t"linse"8a8e="L845"8 e=dev_ama" claxf> ss=")e8ode=d80ref">"L8514i2c>145="line" na* Th94neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"8e9e="L845"8 ef="+code=dev_a  t"lins"8/a>;
80 hrefbcvcode=i2c_do_add_adaa* 98146="line" name="L795"> 795<=R66 873
unlike  tef="+code=dev_a  t"linse"8nmsgsef="+8nit */
146hrc32="L86f">res;
)) {
 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
                r/a>8= -1472"line" nu8ame="L794"> 794uref">E2c>1472"line" nvalu1ame="L794"> 794valu1c#L8t=i2c_do_add_adapter(strclass=hr8nev_aflags8L812" id="L8114i2c>1412"l8ne" n81e="L8s/i2c14i2c-core.c#L818" id="L8114i2c8iv,met8d" rhref="+ss="sref">EXPO8T_SYM81L8513i2c>135=un2="4f">res;
)) {
res;
)) {
re=adres;
8a href="d14i3ers/i2c14i2c8core.81L813" id="L81466ref="+code=Efataalgo)) {
res;
 794valu1c#L81=e" name=class="sref">re=adme="L845"8="+code=dev_a_a=adi2c_, 147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
 857     class=""L791414i2c-core.c#L8="+c* LUS_WRITE"> 759msgef="+c* LUS_WRITE ?=aclg_jiffire"lins" _adand4i3ers/i2c14i2c-_adandc#L8in>);
EXPORT_SYMaspan>99" id="L7914i14i2c-core.c#L8="+c* LUS_BYTE_DATA"> 759msgef="+c* LUS_BYTE_DATA="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=ad1417ref=ass="sref">r8s81 href    tef="+code=dev_a  t"lins"= 1se?=8141="line"8name=========866 764<8a>   82   rt>res 792res="L8714i2c>147="lineL781smbus_write_byte_fataalgo)) {
re=adres;
unlike  tef="+code=dev_a  t"linse"8dev_aflags841"> 866             8  rOP82TSUPPbcvcode=i2c_do_add_adaa*>irefsmbus_c>14_word_fata -uSMBus [ regiread word[ regi"4unlike  tef="+code=dev_a  t"linse"81v,met8;
unlike  tef="+code=dev_a  t"linse"8d1424ers/i8c14i2c-core.c#L824" id="L8214i282L813"&cvcode=i2c_do_add_adaas @ _adand: Byte dc>erp, unlike  tef="+code=dev_a  t"linse"8code=EXPOR8_SYMBOL" class="sref">EXP8RT_SY82hname"L8514i2c>145="line" na*="sref">unlike  tef="+code=dev_a  t"linse"8"7e="L845"8s/i2c14i2c-core.c#L825" i8="L8282e="L81cvcode=i2c_do_add_adaaa"Th94neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"8"8e="L845"8
"L8514i2c>145="line" na* 98==unsigned [ regiword[ regi"rece="+d from8sane77dama.c>146="line" name="L795"> 795<=R66unlike  tef="+code=dev_a  t"linse"8treatssce 8s an i2c_adapter.
8a hre83   rt>146hrc32="L86f">res;
14_word_fataalgo)) {
14_word_fata="L87" id="f="+code=adaps" class="sreL792"> 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8t=i2c_do_add_adapter(strclass=hr8tsss="sref8f="d143vers/i2c14i2c-core8c#L8383=adaps/i2c14i2c-core.c#L818" id="L8114i2c8t is dess"8= besless "can 64k r mce 8sg.le832="L869">    un2="4f">res;
)) {
res;
)) {
re=ad
    dc>1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad,met8, or else "comnumbersof b8tYlew83inclass="sref">NUT_SYMBOL" claef="+code=8a1424ers/i8lass=lass="sref">i2c_adap8class83L813" id="L81466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="sref">res;
);hrefsmbus_e!\n="L8714i2c>147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
i2c_"L7914i214i2c-core.c#L8="+c* LUS_READ"> 759msgef="+c* LUS_READ ?=acl2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
 857     class=""L7914i214i2c-core.c#L8="+c* LUS_WORD_DATA"> 759msgef="+c* LUS_WORD_DATA="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=adi28_adap83ref">EXPORT_Sdapter.714i2c>147="line"t  u>re.c#L782" id=""t  u>ef="smlt; 0" ?1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="s:6f">res;
)) {
re=ad(strmsgcode=i2c_do_add_8damsg84   rt>res 792res="L8714i2c>147="lineL781smbus_c>14_word_fataalgo)) {
14_word_fata="L8t1=e" name=class="sref">re=adms8ef="+code=dev_amsgss=""sr8f">i284"+codef="d1481ers/i2c14i2c-core.c#L781" 8 write, mu8"lins" class="sref">recoa8s=hre842="L81cvcode=i2c_do_add_adama*="sref">unlike  tef="+code=dev_a  t"linse"8 2c_adapte842" id="L8414i2c>1442"lin8" nam84TSUPPbcvcode=i2c_do_add_adaa*>irefsmbus_write_word_fata -uSMBus [ regiwrite word[ regi"4unlike  tef="+code=dev_a  t"linse"8douveserrn8id="L8414i2c>1443"line" n8me=ad844="L8bcvcode=i2c_do_add_adaas @ model: Handle "lisla"+ 77damaunlike  tef="+code=dev_a  t"linse"8">i2c_bus_8bufhref="+code=i2cbufadap8" (ch84L813"&cvcode=i2c_do_add_adaas @ _adand: Byte dc>erp, unlike  tef="+code=dev_a  t"linse"8code=dev_a8 t"lins" class="sref">re=8d145="line" na* @valu1: 16/4>==[ regiword[ regi"bewrittel="sref">unlike  tef="+code=dev_a  t"linse"8"ore.c#L838pan>, unlike  tef="+code=dev_a  t"linse"8"i2c_do_ad8i2c-core.c#L846" id="L8418i2c>184ref">"L8514i2c>145="line" na* Th94neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"8 ;
 795<=R66#byt8ler driver model init */<8span>85" id="L8514i2c>145="line" na*s="sref">unlike  tef="+code=dev_a  t"linse"86759ms8 transmitted, else error 8rn146hrc32="L86f">res;
)) {
 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
145="line" name=86668"> 8685ref="+code=EAGAIN" s" class=""L79142c>1472"line" nu="+code=dev"> 794uref">EX else lass="srevalu1ame="L794"> 794valu1c#L8t=i2c_do_add_adapter(strclass=hr8d2c_adapte8>recous=href="+code=i2cco8s="li85e="L8s/i2c14i2c-core.c#L818" id="L8114i2c8louveserrn8-core.c#L853" id="L8514i28>145385L8513i2c>135=un2="4f">res;
)) {
res;
)) {
re=adi2c_bus_8L" class="sref">EXPORT_SY8BOL)) {
res;
 794valu1c#L81=e" name=class="sref">re=adi2c_, 147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
 857     class=""L791414i2c-core.c#L8="+c* LUS_WRITE"> 759msgef="+c* LUS_WRITE ?=aclg_jiffire"lins" _adand4i3ers/i2c14i2c-_adandc#L8in>);
EXPORT_SYMaspan>99" id="L7914i14i2c-core.c#L8="+c* LUS_WORD_DATA"> 759msgef="+c* LUS_WORD_DATA="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=ad;


res 792res="L8714i2c>147="lineL781smbus_write_word_fataalgo)) {
re=ad
unlike  tef="+code=dev_a  t"linse"8sass="sref8rno, or else "comnumberso8 bytY86TSUPPbcvcode=i2c_do_add_adaa*>irefsmbus_4unlike  tef="+code=dev_a  t"linse"8souveserrn8c_adaclass=lass="sref">i28_adap864="L8bcvcode=i2c_do_add_adaas @ model: Handle "lisla"+ 77damaunlike  tef="+code=dev_a  t"linse"8o>i2c_bus_8bufhref="+code=i2cbufadap8=="L886L813"&cvcode=i2c_do_add_adaas @ _adand: Byte dc>erp, unlike  tef="+code=dev_a  t"linse"8sf="d1454e8_adalass="sss="e"sref">i28_adap86hname"L8514i2c>145="line" na* @valu1: 16/4>==[ regiword[ regi"bewrittel="sref">unlike  tef="+code=dev_a  t"linse"8s;
unlike  tef="+code=dev_a  t"linse"8i2c_adaptm8gef="+code=dev_amsgss="s"8class86ref">"L8514i2c>145="line" na* Th94neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"8-core.c#L887" id="L8614i2c>146="line8 name86 hrefbcvcode=i2c_do_add_adaa* 98==unsigned [ regiword[ regi"rece="+d from8sane77dama.c>146="line" name="L795"> 795<=R66ms8ef="+code=dev_amsgss=""sr8f">i287" id="L8514i2c>145="line" na*s="sref">unlike  tef="+code=dev_a  t"linse"8 sread, mu8"lins" class="sref">recoa8s=hre87"+cod>146hrc32="L86f">res;
 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
 787ref="+code=EAGAIN" s" class=""L72c>1472"line" nu="+code=dev"> 794uref">EX else lass="srevalu1ame="L794"> 794valu1c#L8t=i2c_do_add_adapter(strclass=hr8=ass="sref872" id="L8714i2c>1472"lin8" nam87e="L8s/i2c14i2c-core.c#L818" id="L8114i2c814i2c-core8c#L873" id="L8714i2c>14738line"87L8513i2c>135=un2="4f">res;
)) {
res;
)) {
re=ad82c_bus_tbufhref="+code=i28bufad87s" sref">i2c_2c>1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=adre=8di2c_bus_tbufhref="+fataalgo)) {
res;
 794valu1c#L81=e" name=class="sref">re=ad;
, EXPORT_Si2c-core.c#L819"t  u>re.c#L782" id=""t  u>ef="sref">res;
);hrefsmbus_e!\n="L8714i2c>147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
 759msgef="+c* LUS_WRITE ?=aclg_jiffire"lins" _adand4i3ers/i2c14i2c-_adandc#L8in>);
)) {
re=ad 798========< else error 8rn147="line"t  u>re.c#L782" id=""t  u>ef="smlt; 0" ?1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="s:6f">res;
)) {
re=ad68"> 86882="L8    tef="+code=dev_a  t"lins"= 1se?=8lass="sref8>recous=href="+code=i2cco8s="li88TSUPPbgt;res 792res="L8714i2c>147="lineL781smbus_4)) {
re=adNUT_SYMBOL" claef="+code=8XPORT_SYMB8L" class="sref">EXPORT_SY8BOLunlike  tef="+code=dev_a  t"linse"8Xode=dev_a8 href4adapter.88hname"L8514i2c>145="line" na*>irefsmbus_c>14_block_fata -uSMBus [ regiblock14[ regi"4unlike  tef="+code=dev_a  t"linse"8meas an i28 href4adapter.88e="L81cvcode=i2c_do_add_adaaa"@ model: Handle "lisla"+ 77damaunlike  tef="+code=dev_a  t"linse"8  cla mes!8 href4adapter.88ref">"L8514i2c>145="line" na* @ _adand: Byte dc>erp, unlike  tef="+code=dev_a  t"linse"8 n>
88 hrefbcvcode=i2c_do_add_adaa* @valu1s: Byte array_2c>o which  ata willibe c>14; big enough "liholdunlike  tef="+code=dev_a  t"linse"8L7813i2c798========< else error 8rn146="line" name="L795"> 795<=R66res;
145="line" na*="sref">unlike  tef="+code=dev_a  t"linse"8irstsmesc18i2c-core.c#L776" id="L7718i2c>1892="L81cvcode=i2c_do_add_adaaa"Th9414[ regi"4neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"8n>
98sponsa.c>146="line" name="L795"> 795<=R66
146="line" name="L795"> 795<=R66hr94<2c>132="4requires5that hre  model'4unlike  tef="+code=dev_a  t"linse"8=ode=dev_a82c-core.c#L794" id="L791382c>1389hname"L8514i2c>145="line" na*>hre ="+cFUN+c* LUS_READ_BLOCK_DATA<2c>132="ality.aaNo  allunlike  tef="+code=dev_a  t"linse"8=eas an i28name="L857"> 857    a8(&/a>89e="L81cvcode=i2c_do_add_adaaa"suppor>>hr94; it4remods on a specificunlike  tef="+code=dev_a  t"linse"8= cla mes!8de=dev_ama" claxf> ss=")e8ass="89ref">"L8514i2c>145="line" na* mechanism (="+cM_RECV_LEN) which may_no  be impleine"ed.c>146="line" name="L795"> 795<=R66
unlike  tef="+code=dev_a  t"linse"9ef">dev_wa9n(&/a>(146hrc32="L86f">res;
14_block_fataalgo)) {
14_block_fata="L87" id="f="+code=adaps" class="sreL792"> 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
 794uref">E */
 794valu1sc#L8t=i2c_do_add_adapter(strclass=hr9 2sgsef="+9o2c-core.c#L776" id="L7719odd l902="L8s/i2c14i2c-core.c#L818" id="L8114i2c9dev_aflags9lins&ref"_add_adapter92C_M_90e="L869">    un2="4f">res;
)) {
res;
)) {
re=ad,met9o+ method is de :=aclass=9sref"90L8513i2c>135=2c>1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad;
re=adi2c_bus_tbufhref="+"t  u>re.c#L782" id=""t  u>ef="sref">res;
);hrefsmbus_e!\n="L8714i2c>147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
 857    a9=e" n90e="L857"> 857     class=""L7914i214i2c-core.c#L8="+c* LUS_READ"> 759msgef="+c* LUS_READ ?=acl2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
 ss=")e9ode=d90ref">EXPORT_SYMaspan>99" id="L7914i4i14i2c-core.c#L8="+c* LUS_BLOCK_DATA"> 759msgef="+c* LUS_BLOCK_DATA="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=ad;
909ef="+code=EAdre.c#L782" id=""t  u>ef="t=i2c_do_add_adapter(strclass=hr9name="L8739> 873
re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad147="linevalu1same="L794"> 794valu1sc#L8,ci2c14i2c-core.c#L819fataalgo)) {
1472"line" nfataalgo)) {
re=ad    dapter.2c>1472"line" nfataalgo)) {
re=ad,met9d" rhref="+ss="sref">EXPO9T_SYM914pan>    tef="+code=dev_a  t"lins"= 1se?=9>res;
9a href="d14i3ers/i2c14i2c9core.91L813">res 792res="L8714i2c>147="lineL781smbus_c>14_block_fataalgo)) {
14_block_fata="L8t1=e" name=class="sref">re=adre=adunlike  tef="+code=dev_a  t"linse"9n8e="L845"9i2c_do_add_adauned" rhref9"+ss=91ref">"L8514i2c>145="line" na* irefsmbus_write_block_fata -uSMBus [ regiblockunlike  tef="+code=dev_a  t"linse"9i9========94i2c>1417ref=ass="sref">r9s91 hrefbcvcode=i2c_do_add_adaa* @ model: Handle "lisla"+ 77damaunlike  tef="+code=dev_a  t"linse"9141="line"9name=========866 764<9a>   92" id="L8514i2c>145="line" na* @ _adand: Byte dc>erp, unlike  tef="+code=dev_a  t"linse"9"sss="sref9>dev_warn(&/a>(145="line" na* @length: Size of  ata block;uSMBus allows at most732 bytesunlike  tef="+code=dev_a  t"linse"9"2sgsef="+9class="sref">res;
146="line" name="L795"> 795<=R66 866             9  rOP92TSUPPbcvcode=i2c_do_add_adaa*c>146="line" name="L795"> 795<=R66,met9;
neg  i"+   mno="sref">unlike  tef="+code=dev_a  t"linse"9d1424ers/i9c14i2c-core.c#L824" id="L9214i292L813"&cvcode=i2c_do_add_adaas 98146="line" name="L795"> 795<=R66EXP9RT_SY92hname"L8514i2c>145="line" na*s="sref">unlike  tef="+code=dev_a  t"linse"9"7e="L845"9s/i2c14i2c-core.c#L825" i9="L8292e="L81gt;146hrc32="L86f">res;
)) {
 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
EXPORT_SYMaspan>99" id="L7914i42c>1472"line" nu8ame="L794"> 794uref">E2c>1472"line" nlengthame="L794"> 794lengthc#L8re" id="2c>1472"line" nu8ame="L794"> 794uref">E */
 794valu1sc#L8t=i2c_do_add_adapter(strclass=hr9c9========9itdmodevice as an i2c_ada9ter.<92 hrefs/i2c14i2c-core.c#L818" id="L8114i2c9treatssce 9s an i2c_adapter.
9a hre930ef="+code=EAun2="4f">res;
)) {
res;
)) {
re=ad    d 794lengthc#L8 /i2ci14i2c-core.c#L8="+c* LUS_BLOCK_MAX"> 759msgef="+c* LUS_BLOCK_MAXc#L8t=i2c_do_add_adapter(strclass=hr9tev_aflags9.
    "L7914i42c>1472"line" nlengthame="L794"> 794lengthc#L8 ref">res;
 759msgef="+c* LUS_BLOCK_MAXc#L81=e" name=class="sref">re=ad,met9, or else "comnumbersof b9tYlew93L8513i2c>135=2c>1472"line" nfataalgo)) {
res;
 794lengthc#L81=e" name=class="sref">re=adi2c_adap9class93L813" id="L81466ref="+code=Ememcpyre.c#L782" id="memcpy="L87i2c14i2c-core.c#L819fataalgo)) {
1472"line" nvalu1same="L794"> 794valu1sc#L8,cf">res;
 794lengthc#L8t1=e" name=class="sref">re=adi2c_, 147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
 857     class=""L7914f">res;
 759msgef="+c* LUS_WRITE ?=aclg_jiffire"lins" _adand4i3ers/i2c14i2c-_adandc#L8in>);
i29_adap93ref">EXPORT_SYMaspan>99" id="L7914i14i2c-core.c#L8="+c* LUS_BLOCK_DATA"> 759msgef="+c* LUS_BLOCK_DATA="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=ad(strmsgcode=i2c_do_add_9damsg94   rt>res 792res="L8714i2c>147="lineL781smbus_write_block_fataalgo)) {
re=adms9ef="+code=dev_amsgss=""sr9f">i294"+codef="d1481ers/i2c14i2c-core.c#L781" 9 write, mu9"lins" class="sref">recoa9s=hre942="L81cvcode=i2c_do_add_adama R unlike  tef="+code=dev_a  t"linse"9 2c_adapte942" id="L8414i2c>1442"lin9" nam94TSUPPbgt;146hrc32="L86f">res;
14_hrefblock_fataalgo)) {
14_hrefblock_fata="L87" id="f="+code=adaps" class="sreL792"> 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
1443"line" n9me=ad944ef">EXPORT_SYMaspan>99" id="L7914i914i14i2c-core.c#L8u8ame="L794"> 794uref">E2c>1472"line" nlengthame="L794"> 794lengthc#L8re2c>1472"line" nu8ame="L794"> 794uref">E */
 794valu1sc#L8t=i2c_do_add_adapter(strclass=hr9">i2c_bus_9bufhref="+code=i2cbufadap9" (ch94L813"s/i2c14i2c-core.c#L818" id="L8114i2c9code=dev_a9 t"lins" class="sref">re=9di2c_un2="4f">res;
)) {
res;
)) {
re=ad,  8572c>1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad=e" name=class="sref">re=ad 794lengthc#L8 /i2ci14i2c-core.c#L8="+c* LUS_BLOCK_MAX"> 759msgef="+c* LUS_BLOCK_MAXc#L8t=i2c_do_add_adapter(strclass=hr966#byt9ler driver model init */<9span>950ef="+code=EAGAIN" s"2c>1472"line" nlengthame="L794"> 794lengthc#L8 ref">res;
 759msgef="+c* LUS_BLOCK_MAXc#L81=e" name=class="sref">re=adms9 transmitted, else error 9rn1472"line" nfataalgo)) {
res;
 794lengthc#L81=e" name=class="sref">re=ad69"> 8695ref="+code=EAef="+code=adaps"t  u>re.c#L782" id=""t  u>ef="sref">res;
);hrefsmbus_e!\n="L8714i2c>147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
    "L7914i4n>99" id="L7914i14i2c-core.c#L8="+c* LUS_READ"> 759msgef="+c* LUS_READ ?=acl2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
EXPORT_SYMaspan>99" id="L7914i9114i2c-core.c#L8="+c* LUS_="+cBLOCK_DATA"> 759msgef="+c* LUS_="+cBLOCK_DATA="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=adi2c_bus_9L" class="sref">EXPORT_SY9BOLre.c#L782" id=""t  u>ef="smlt; 0"=e" name=class="sref">re=adre.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad
EXPORT_Si2c-core.c#L819memcpyre.c#L782" id="memcpy="L8714i2c>147="linevalu1same="L794"> 794valu1sc#L8,ci2c14i2c-core.c#L819fataalgo)) {
1472"line" nfataalgo)) {
re=ad;

)) {
re=ad
res 792res="L8714i2c>147="lineL781smbus_c>14_hrefblock_fataalgo)) {
14_hrefblock_fata="L8t1=e" name=class="sref">re=ad
re=ad146hrc32="L86f">res;
)) {
 792
 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8in>);
i29_adap964ef">EXPORT_SYMaspan>99" id="L7914i914i42c>1472"line" nu8ame="L794"> 794uref">E2c>1472"line" nlengthame="L794"> 794lengthc#L8re" id="2c>1472"line" nu8ame="L794"> 794uref">E */
 794valu1sc#L8t=i2c_do_add_adapter(strclass=hr9o>i2c_bus_9bufhref="+code=i2cbufadap9=="L896L813"s/i2c14i2c-core.c#L818" id="L8114i2c9sf="d1454e9_adalass="sss="e"sref">i29_adap966" sref">i2c_un2="4f">res;
)) {
res;
)) {
re=ad;
EXPORT_Sd 794lengthc#L8 /i2ci14i2c-core.c#L8="+c* LUS_BLOCK_MAX"> 759msgef="+c* LUS_BLOCK_MAXc#L8t=i2c_do_add_adapter(strclass=hr9-core.c#L897" id="L8614i2c>146="line9 name969ef="+code=EAGAIN" s"2c>1472"line" nlengthame="L794"> 794lengthc#L8 ref">res;
 759msgef="+c* LUS_BLOCK_MAXc#L81=e" name=class="sref">re=adms9ef="+code=dev_amsgss=""sr9f">i2970ef="+code=EA2c>1472"line" nfataalgo)) {
res;
 794lengthc#L81=e" name=class="sref">re=adrecoa9s=hre972c14i2c-core.2c>1472"line" nmemcpyre.c#L782" id="memcpy="L8714i2c>147="linefataalgo)) {
1472"line" nvalu1same="L794"> 794valu1sc#L8,cf">res;
 794lengthc#L8t1=e" name=class="sref">re=ad1471"line" name="L799"> 797ref="+code=EA, 147="lineef="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865" id="L8614i2c>146href="+code=E,cg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L865841">                 ?=aclg_jiffire"lins".f="d14i3ers/i2c14i2c-core.c#L8s/i2c14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
    "L7914i4n>99" id="L791f">res;
 759msgef="+c* LUS_WRITE ?=aclg_jiffire"lins" _adand4i3ers/i2c14i2c-_adandc#L8in>);
EXPORT_SYMaspan>99" id="L7914i14i2c-core.c#L8="+c* LUS_="+cBLOCK_DATA"> 759msgef="+c* LUS_="+cBLOCK_DATA="L8,ci2c14i2c-core.c#L819fataalgo)) {
re=ad92c_bus_tbufhref="+code=i29bufad97s" sr    tef="+code=dev_a  t"lins"= 1se?=9code=dev_a9 t"lins" class="sref">re=9dres 792res="L8714i2c>147="lineL781smbus_write_hrefblock_fataalgo)) {
re=ad;
, "L8514i2c>145="line" n/* Simula3/5a SMBus -_adand ushre "li"4unlike  tef="+code=dev_a  t"linse"9an>
unlike  tef="+code=dev_a  t"linse"9, 866#9ytYl received,vice as an 92c_ad980ef=""t  icref="+code=adaps"= besless ">146hrc32="L86f">res;
E */
 794uref">EX else lass="sre65841">                 ?=ac>unlike  tef="+code=dev_a  t"linse"9,sread, mu9========< else error 9rn>14i2c-core.c#L8flag>re.c#L782" id="flag>ef="in>);
148="line" name=86669"> 8698ref="+code=EAGAIN" s" class=""L791444444char>14i2c-core.c#L8c>14_writere.c#L782" id="c>14_writec#L8re2c>1472"line" nu8ame="L794"> 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8i72c>1466ref="+code=E"izere.c#L782" id=""izeef="in>);
recous=href="+code=i2cco9s="li98e="L869">    "L7914i4n>99" id="L7914i c_un2="4f">res;
)) {

)) {
EXPORT_SY9BOLunlike  tef="+code=dev_a  t"linse"9,ode=dev_a9 href4adapter.98hname"L8514i2c>145="line" naaaaaaaaaaneed to use only oneam==unlike  tef="+code=dev_a  t"linse"9,;
98e="L81cvcode=i2c_do_add_adaaaaaaaaaaamost7thunlike  tef="+code=dev_a  t"linse"9  cla mes!9 href4adapter.98ref">"L8514i2c>145="line" naaaaaaaaaasimpler.a*s="sref">unlike  tef="+code=dev_a  t"linse"9,n>
989ef="+code=EAunsigned char>14i2c-core.c#L8msgbuf0algo)) {
res;
 759msgef="+c* LUS_BLOCK_MAXc#L8+3]1=e" name=class="sref">re=ad========< else error 9rn14i2c-core.c#L8msgbuf1algo)) {
res;
 759msgef="+c* LUS_BLOCK_MAXc#L8+2]1=e" name=class="sref">re=adres;
 759msgefnumc#L8 ref">res;
14_writere.c#L782" id="c>14_writec#L8 =ref">res;
 759msgef="+c* LUS_READ ?=a ? 2 : 11=e" name=class="sref">re=adE2c>1472"line" nmsgalgo)) {
[2] re{e{e14i2c-core.c#L865841">                 ?=aclg_jiffire"lins"flag>re.c#L782" id="flag>ef="i 1cl2c>1472"line" nmsgbuf0algo)) {
);
    "L7914i4n>99" id="L7914i c{e14i2c-core.c#L865841">                 ?=aclg_jiffire"lins"flag>re.c#L782" id="flag>ef=" |ef">res;
 759msgef="+cM_RD ?=acl0cl2c>1472"line" nmsgbuf1algo)) {

EXPORT_SYMaspan>99" id="L7914i91}1=e" name=class="sref">re=adi2c_2c>1466ref="+code=Eialgo)) {
re=adi2c_bus_tbufhref="+u8ame="L794"> 794uref">E2c>1472"line" npart 794partre=ad;
 857    a9(&/a>99e="L857"> 8572c>1466ref="+code=E"t  u>re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad ss=")e9ass="99ref">=e" name=class="sref">re=ad
i2c_bus_tbufhref="+msgbuf0algo)) {
res;
re=addev_w20ef">"+code=dev_a  t"lins20ef">20efef="+code=EAfwitchtrode=dev_amsgss="izere.c#L782" id=""izeef=") s/i/pre>dev_db/5d/32c14db5acf65f6d1517128945378cf11581_3/20ef">e" name=class="sref">re=addev_w20eref">res;
res;
 759msgef="+c* LUS_QUICKc14i:=e" name=class="sref">re=addev_w20e2c-core.c#L776" id="L7720e2c>20eref="+code=EAGAIN" s"2c>1472"line" nmsgalgo)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 re01=e" name=class="sref">re=addev_w20e&e isdno 623 ;
20ee="L869">    "L7914i42L8514i2c>145="line" n/* Special.case: The c>14/write field is used as  ata *s="sref">unlike  tef="+code=dev_a  t"linse20e4">dev_w20ei2c_adapter.
20e4ef">EXPORT_SYMaspan>2c>1472"line" nmsgalgo)) {
[0].14i2c-core.c#L8flag>re.c#L782" id="flag>ef=" ref">res;
re.c#L782" id="flag>ef=" |erode=dev_amsgss=c>14_writere.c#L782" id="c>14_writec#L8 =ref">res;
 759msgef="+c* LUS_READ ?=a ?>unlike  tef="+code=dev_a  t"linse20e5">dev_w20e mo e" nus on "comfirst20e m>20e5="L869">    "L7914i4n>99" id="L7914i caspan>2c>1472"line" n="+cM_RD"> 759msgef="+cM_RD ?=a : 0t1=e" name=class="sref">re=addev_w20ec-core.c#L794" id="L79120ec->20ei2c-core.c#L794" id="466ref="+code=Enum"> 759msgefnumc#L8 re11=e" name=class="sref">re=addev_w20eame="L857"> 857    20eam>20ee="L857"> 857    bc>1k1=e" name=class="sref">re=addev_w20ee=dev_ama" claxf> ss=")20ee=>20e8c14i2c-core.case f">res;
 759msgef="+c* LUS_BYTEc14i:=e" name=class="sref">re=addev_w20eef="+code=dev_a  t"lins20eef>20e9ef="+code=EAGAIN" s"d14_writere.c#L782" id="c>14_writec#L8 =ref">res;
 759msgef="+c* LUS_READ ?=a) s/i" name=class="sref">re=addev_w20> 873
    "L7914i4n>99" id2L8514i2c>145="line" n/* Special.case: only a c>14! *s="sref">unlike  tef="+code=dev_a  t"linse2011">dev_w20nit */
)) {
[0].14i2c-core.c#L8flag>re.c#L782" id="flag>ef=" ref">res;
 759msgef="+cM_RD ?=a |ef">res;
re.c#L782" id="flag>ef="1=e" name=class="sref">re=addev_w206                r/a20620>ref="+code=EAGAIN" s" class="466ref="+code=Enum"> 759msgefnumc#L8 re11=e" name=class="sref">re=addev_w20L812" id="L8114i2c>1412"20L81>20>e="L869">    "L7914i4    tef="+code=dev_a  t"lins"= 1se?20>4">dev_w20d" rhref="+ss="sref">EXP20d" >20>4ef">EXPORT_SYMaspan>bc>1k1=e" name=class="sref">re=addev_w20a href="d14i3ers/i2c14i220a h>20>5c14i2c-core.case f">res;
 759msgef="+c* LUS_BYTE_DATAc14i:=e" name=class="sref">re=addev_w20="+code=dev_a_a=ad20>i2c-core.c#L794" id="d14_writere.c#L782" id="c>14_writec#L8 =ref">res;
 759msgef="+c* LUS_READ ?=a)=e" name=class="sref">re=addev_w20e.c#L816" id="L8114i2c>120e.c>20>e="L857"> 857     class="2c>1472"line" nmsgalgo)) {
[1].14i2c-core.c#L8lename="L794"> 794lenc#L8 re11=e" name=class="sref">re=addev_w20i2c_do_add_adauned" rhre20i2c>20>ref">EXPORT_SYMaspan>98re=addev_w204i2c>1417ref=ass="sref">204i2>20>9ef="+code=EAGAIN" s" class="2c>1472"line" nmsgalgo)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 re21=e" name=class="sref">re=addev_w20name=========866 76420nam>20naef="+code=EAGAIN" s" class="2c>1472"line" nmsgbuf0algo)) {
res;
)) {
re=addev_w20>dev_warn(&/a>(de>20n2c14i2c-core.........    tef="+code=dev_a  t"lins"= 1se?2022">dev_w20class="sref">res;
20nref="+code=EAGAIN" s"bc>1k1=e" name=class="sref">re=addev_w2041"> 866            2041">20n3c14i2c-core.case f">res;
 759msgef="+c* LUS_WORD_DATA="L8:=e" name=class="sref">re=addev_w20;
EXPORT_SYMaspan>d14_writere.c#L782" id="c>14_writec#L8 =ref">res;
 759msgef="+c* LUS_READ ?=a)=e" name=class="sref">re=addev_w20c14i2c-core.c#L824" id="20c14>20n5="L869">    "L7914i4n>99" id2c>1472"line" nmsgalgo)) {
[1].14i2c-core.c#L8lename="L794"> 794lenc#L8 re21=e" name=class="sref">re=addev_w20_SYMBOL" class="sref">EX20_SY>20ni2c-core.c#L794" id="98re=addev_w20s/i2c14i2c-core.c#L825" 20s/i>20ne="L857"> 857     class="2c>1472"line" nmsgalgo)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 re31=e" name=class="sref">re=addev_w20
EXPORT_SYMaspan>99" id="2c>1472"line" nmsgbuf0algo)) {
res;
)) {
re=addev_w20itdmodevice as an i2c_ad20itd>20n9ef="+code=EAGAIN" s" class="2c>1472"line" nmsgbuf0algo)) {
res;
)) {
re=addev_w20s an i2c_adapter.20s a>20s c14i2c-core.........    tef="+code=dev_a  t"lins"= 1se?2031">dev_w20f="d143vers/i2c14i2c-cor20f=">20s2c14i2c-core.........bc>1k1=e" name=class="sref">re=addev_w20= besless "can 64k r mce20= b>20s2c14i2c-core.case f">res;
re=addev_w20.
    "L7914i42c>1472"line" nnum"> 759msgefnumc#L8 re2;d2L8514i2c>145="line" n/* Special.case *s="sref">unlike  tef="+code=dev_a  t"linse2034">dev_w20, or else "comnumbersof 20, o>20s4ef">EXPORT_SYMaspan>2c>1472"line" nc>14_writere.c#L782" id="c>14_writec#L8 =ef">res;
 759msgef="+c* LUS_READ ?=a1=e" name=class="sref">re=addev_w20lass=lass="sref">i2c_ada20las>20s5="L869">    "L7914i42c>1472"line" nmsgalgo)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 re31=e" name=class="sref">re=addev_w20bufhref="+code=i2cbufada20buf>20si2c-core.c#L794" id="466ref="+code=Emsgalgo)) {
[1].14i2c-core.c#L8lename="L794"> 794lenc#L8 re21=e" name=class="sref">re=addev_w20" id="L8314i2c>143="line20" i>20se="L857"> 857    2c>1472"line" nmsgbuf0algo)) {
res;
)) {
re=addev_w20_adalass="sss="e"sref">i20_ad>20sref">EXPORT_SYMaspan>2c>1472"line" nmsgbuf0algo)) {
res;
)) {
re=addev_w20ref="d1438ers/i2c14i2c-c20ref>20s9ef="+code=EAGAIN" s"bc>1k1=e" name=class="sref">re=addev_w20a>(strmsgcode=i2c_do_add20a>(>20a>c14i2c-core.case f">res;
 759msgef="+c* LUS_BLOCK_DATA="L8:=e" name=class="sref">re=addev_w20ef="+code=dev_amsgss=""s20ef=>20a2c14i2c-core.........d14_writere.c#L782" id="c>14_writec#L8 =ref">res;
 759msgef="+c* LUS_READ ?=a) s/i" name=class="sref">re=addev_w20"lins" class="sref">reco20"li>20aref="+code=EAGAIN" s" class="466ref="+code=Emsgalgo)) {
[1].14i2c-core.c#L8flag>re.c#L782" id="flag>ef=" |ref">res;
 759msgef="+cM_RECV_LEN ?=a1=e" name=class="sref">re=addev_w2042" id="L8414i2c>1442"li2042">20ae="L869">    "L7914i4n>99" id2c>1472"line" nmsgalgo)) {
[1].14i2c-core.c#L8lename="L794"> 794lenc#L8 re11d2L8514i2c>145="line" n/* blockunlike  tef="+code=dev_a  t"linse2044">dev_w20id="L8414i2c>1443"line" 20id=>20a4="L8bcvcode=i2c_do_add_adaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaathe underlybus ef="+c *s="sref">unlike  tef="+code=dev_a  t"linse2045">dev_w20bufhref="+code=i2cbufada20buf>20a5="L869">    "L7914i4}"98re=addev_w20 t"lins" class="sref">re20 t">20ai2c-core.c#L794" id="n>99" id2c>1472"line" nmsgalgo)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 ref">res;
)) {
re=addev_w20pan>,  857     class="d)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 /i2ci14i2c-core.c#L8="+c* LUS_BLOCK_MAX"> 759msgef="+c* LUS_BLOCK_MAXc#L8 +e2) s/i" name=class="sref">re=addev_w20i2c-core.c#L846" id="L8420i2c>20aref">EXPORT_SYMaspan>99" id="L7914i4i14i2c-core.c#L8dev_er41">            dev_er4ef">7i2c14i2c-core.c#L81965" id="L8614i2c>146href="+code=Es/i2c14i2c-core.c#L8dev1">            devde=Ein>);
dev_w20[ regiInvalid block);
dev_w20ler driver model init */20ler>20le="L869">    "L7914i4n>99" id="L7914i caspan>2c>1472"line" nfataalgo)) {
re=addev_w20 transmitted, else error20 tr>20l2c14i2c-core........................., re=addev_w20>145="line" name=86620>14>20lref="+code=EAGAIN" s" class="    tef="+code=dev_a  t"lins"= 1se?2053">dev_w20>recous=href="+code=i2cc20>re>20le="L869">    "L7914i4n>99" idfortrode=dev_amsgss=ialgo)) {
)) {
)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L81d2de=dev_amsgss=ialgo)) {
re=addev_w20-core.c#L853" id="L8514i20-co>20l4ef">EXPORT_SYMaspan>99" id="L7914i9114i2c-core.c#L8msgbuf0algo)) {
res;
)) {
res;
)) {
res;
)) {
re=addev_w20L" class="sref">EXPORT_S20L" >20l5="L869">    "L7914i4}=e" name=class="sref">re=addev_w20s/i2c14i2c-core.c#L854" 20s/i>20li2c-core.c#L794" id="bc>1k1=e" name=class="sref">re=addev_w20>
 857case f">res;
re=addev_w20vedmodevice as an i2c_ad20ved>20lref">EXPORT_SYMaspan>2c>1472"line" nnum"> 759msgefnumc#L8 re2;d2L8514i2c>145="line" n/* Another special.case *s="sref">unlike  tef="+code=dev_a  t"linse2059">dev_w20e as an i2c_adapter.20l9ef="+code=EAGAIN" s"2c>1472"line" nc>14_writere.c#L782" id="c>14_writec#L8 =ef">res;
 759msgef="+c* LUS_READ ?=a1=e" name=class="sref">re=addev_w20ef="d1459ers/i2c14i2c-co20ef=>20efc14i2c-core.........d)) {
 759msgef="+c* LUS_BLOCK_MAXc#L8t s/i" name=class="sref">re=addev_w20= besless "can 64k r mce20= b>20e2c14i2c-core.................2c>1472"line" ndev_er41">            dev_er4ef">7i2c14i2c-core.c#L81965" id="L8614i2c>146href="+code=Es/i2c14i2c-core.c#L8dev1">            devde=Ein>);
dev_w20ter.
[ regiInvalid block);
dev_w20rno, or else "comnumbers20rno>20ee="L869">    "L7914i4n>99" id="L7914i14i2c-core.c#L8fataalgo)) {
re=addev_w20c_adaclass=lass="sref">i20c_a>20e4ef">EXPORT_SYMaspan>99" id=", re=addev_w20bufhref="+code=i2cbufada20buf>20e5="L869">    "L7914i4}=e" name=class="sref">re=addev_w20_adalass="sss="e"sref">i20_ad>20ei2c-core.c#L794" id="466ref="+code=Emsgalgo)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 ref">res;
)) {
re=addev_w20ref="d14i6ers/i2c14i2c-c20ref>20ee="L857"> 857    fortrode=dev_amsgss=ialgo)) {
)) {
)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L81d2de=dev_amsgss=ialgo)) {
re=addev_w20gef="+code=dev_amsgss="s20gef>20eref">EXPORT_SYMaspan>99" id="2c>1472"line" nmsgbuf0algo)) {
res;
)) {
res;
)) {
res;
)) {
re=addev_w207" id="L8614i2c>146="lin207" >20e9ef="+code=EAGAIN" s"2c>1472"line" nmsgalgo)) {
[1].14i2c-core.c#L8flag>re.c#L782" id="flag>ef=" |ref">res;
 759msgef="+cM_RECV_LEN ?=a1=e" name=class="sref">re=addev_w20ef="+code=dev_amsgss=""s20ef=>20ef2c-core.c#L794" id="466ref="+code=Emsgalgo)) {
[1].14i2c-core.c#L8lename="L794"> 794lenc#L8 re11d2L8514i2c>145="line" n/* blockunlike  tef="+code=dev_a  t"linse2071">dev_w20"lins" class="sref">reco20"li>20e=adap"L8514i2c>145="line" naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaathe underlybus ef="+c *s="sref">unlike  tef="+code=dev_a  t"linse2072">dev_w2014i2c>1471"line" name="L2014i>20eref="+code=EAGAIN" s"bc>1k1=e" name=class="sref">re=addev_w2072" id="L8714i2c>1472"li2072">20e3c14i2c-core.case f">res;
 759msgef="+c* LUS_="+cBLOCK_DATA="L8:=e" name=class="sref">re=addev_w20c#L873" id="L8714i2c>14720c#L>20e4ef">EXPORT_SYMaspan>d14_writere.c#L782" id="c>14_writec#L8 =ref">res;
 759msgef="+c* LUS_READ ?=a) s/i" name=class="sref">re=addev_w202c_bus_tbufhref="+code=i202c_>20e5="L869">    "L7914i4n>99" id2c>1472"line" nmsgalgo)) {
[1].14i2c-core.c#L8lename="L794"> 794lenc#L8 ref">res;
)) {
re=addev_w20 t"lins" class="sref">re20 t">20ei2c-core.c#L794" id="}"98re=addev_w20pan>,  857     class="2c>1472"line" nmsgalgo)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 ref">res;
)) {
re=addev_w20i2c-core.c#L776" id="L7720i2c>20eref">EXPORT_SYMaspan>99" id="d)) {
[0].14i2c-core.c#L8lename="L794"> 794lenc#L8 /i2ci14i2c-core.c#L8="+c* LUS_BLOCK_MAX"> 759msgef="+c* LUS_BLOCK_MAXc#L8 +e1) s/i" name=class="sref">re=addev_w20="d1478ers/i2c14i2c-core20="d>20e9ef="+code=EAGAIN" s" class="99" id="2c>1472"line" ndev_er41">            dev_er4ef">7i2c14i2c-core.c#L81965" id="L8614i2c>146href="+code=Es/i2c14i2c-core.c#L8dev1">            devde=Ein>);
dev_w20ytYl received,vice as an20ytY>20ytef="+code=EAGAIN" s" class="99" id="L7914i4i1cvcode=i2c_dstr[ regiInvalid block);
dev_w20========< else error2020y2c14i2c-core............................ id="2c>1472"line" ndataalgo)) {
re=addev_w20>148="line" name=86620>14>20yref="+code=EAGAIN" s" class=""L791444, re=addev_w20>recous=href="+code=i2cc20>re>20ye="L869">    "L7914i4n>99" id}=e" name=class="sref">re=addev_w20-core.c#L783" id="L7814i20-co>20y4ef">EXPORT_SYMaspan>99" id="fortrode=dev_amsgss=ialgo)) {
)) {
res;
)) {
)) {
re=addev_w20L" class="sref">EXPORT_S20L" >20y5="L869">    "L7914i4n>99" id="L7914i2c>1472"line" nmsgbuf0algo)) {
res;
)) {
res;
)) {
res;
)) {
re=addev_w20 href4adapter.20yi2c-core.c#L794" id="}=e" name=class="sref">re=addev_w20 href4adapter.20ye="L857"> 857    bc>1k1=e" name=class="sref">re=addev_w20 href4adapter.20yref">EXPORT_S77fault:=e" name=class="sref">re=addev_w20 href4adapter.20y9ef="+code=EAGAIN" s"2c>1472"line" ndev_er41">            dev_er4ef">7i2c14i2c-core.c#L81965" id="L8614i2c>146href="+code=Es/i2c14i2c-core.c#L8dev1">            devde=Eii1cvcode=i2c_dstr[ regiUnsupported transact2="4%d\n[ regi="sref"i1466ref="+code=E"izere.c#L782" id=""izeef="t1=e" name=class="sref">re=addev_w20========< else error2020re=addev_w209ref">res;
re=addev_w20i2c-core.c#L776" id="L7720i2c>20<2="L8=e" name=class="sref">re=addev_w20o&e isdno 623 ;
20    ode=dev_amsgss=ialgo)) {
re.c#L782" id="flag>ef=" i2c14 14i2c-core.c#L8="+cCLIENT_PEC"> 759msgef="+cCLIENT_PEC ?=a) i2c14i2c14 14i2c-core.c#L8"izere.c#L782" id=""izeef=" !ref">res;
 759msgef="+c* LUS_QUICKc14i=e" name=class="sref">re=addev_w20 i2c_adapter.
20<4ef">EXPORT_SYMaspan>99" id="L7914i914i4444i2c14i2c14 14i2c-core.c#L8"izere.c#L782" id=""izeef=" !ref">res;
 759msgef="+c* LUS_="+cBLOCK_DATA="L8t1=e" name=class="sref">re=addev_w20d mo e" nus on "comfirst20d m>20re=addev_w202c-core.c#L794" id="L791202c->20unlike  tef="+code=dev_a  t"linse2097">dev_w20name="L857"> 857    20nam>20 857    d)) {
[0].14i2c-core.c#L8flag>re.c#L782" id="flag>ef=" i2c14 14i2c-core.c#L8="+cM_RD"> 759msgef="+cM_RD ?=a)) s/i" name=class="sref">re=addev_w20de=dev_ama" claxf> ss=")20de=>20EXPORT_SYMaspan>99" id="d 759msgefnumc#L8 r=e1) 4L8514i2c>145="line" n/* Write only *s="sref">unlike  tef="+code=dev_a  t"linse2099">dev_w20tef="+code=dev_a  t"lins20tef>20<9ef="+code=EAGAIN" s" class="99" id="2c>1472"line" nirefsmbus_add_pecame="L794"> 794irefsmbus_add_pecef">7i2c14i2c-core.c#L819msgalgo)) {
[0]t1=e" name=class="sref">re=addev_w21ef">"+code=dev_a  t"lins21ef">210tef="+code=EAGAIN" s" class="98145="line" n/* Write followed by c>14 *s="sref">unlike  tef="+code=dev_a  t"linse21e1">dev_w21eref">res;
 794part1472"line" nirefsmbus_msg_pecame="L794"> 794irefsmbus_msg_pecef">70,ci2c14i2c-core.c#L819msgalgo)) {
[0]t1=e" name=class="sref">re=addev_w21e2c-core.c#L776" id="L7721e2c>21eref="+code=EAGAIN" s"}=e" name=class="sref">re=addev_w21e&e isdno 623 ;
21ee="L869">    "L7914i42L8514i2c>145="line" n/* Ask"fortPEC1dtam==14 *s="sref">unlike  tef="+code=dev_a  t"linse21e4">dev_w21ei2c_adapter.
21e4ef">EXPORT_SYMaspan>d)) {
[ode=dev_amsgss=num"> 759msgefnumc#L8-1].14i2c-core.c#L8flag>re.c#L782" id="flag>ef=" i2c14 14i2c-core.c#L8="+cM_RD"> 759msgef="+cM_RD ?=a)>unlike  tef="+code=dev_a  t"linse21e5">dev_w21e mo e" nus on "comfirst21e m>21e5="L869">    "L7914i4n>99" idode=dev_amsgss=msgalgo)) {
[ode=dev_amsgss=num"> 759msgefnumc#L8-1].14i2c-core.c#L8lename="L794"> 794lenc#L8++1=e" name=class="sref">re=addev_w21ec-core.c#L794" id="L79121ec->21ei2c-core.c#L7}=e" name=class="sref">re=addev_w21eame="L857"> 857    21eam>210e="L8   tef="+code=dev_a  t"lins"= 1se?2108">dev_w21ee=dev_ama" claxf> ss=")21ee=>210ref">EXPORT_Si2c-core.c#L819"t  u>re.c#L782" id=""t  u>ef="sref">res;
7i2c-core.c#L81965" id="L8614i2c>146href="+code=Ecl2c>1472"line" nmsgalgo)) {
cl2c>1472"line" nnum"> 759msgefnumc#L8t1=e" name=class="sref">re=addev_w21eef="+code=dev_a  t"lins21eef>21e9ef="+code=EAdre.c#L782" id=""t  u>ef="smlt; 0"=e" name=class="sref">re=addev_w21> 873
    "L7914i4, re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad1">dev_w21nit */
re=ad2">dev_w216                r/a21621>ref="+code=EA4L8514i2c>145="line" n/* ChecktPEC1dtam==14 *s="sref">unlike  tef="+code=dev_a  t"linse2113">dev_w21L812" id="L8114i2c>1412"21L81>21>e="L869">    d)) {
)) {
[ode=dev_amsgss=num"> 759msgefnumc#L8-1].14i2c-core.c#L8flag>re.c#L782" id="flag>ef=" i2c14 14i2c-core.c#L8="+cM_RD"> 759msgef="+cM_RD ?=a)) s/i" name=class="sref">re=ad4">dev_w21d" rhref="+ss="sref">EXP21d" >21>4ef">EXPORT_SYMaspan>i2c-core.c#L819"t  u>re.c#L782" id=""t  u>ef="sref">res;
 794irefsmbus_check_pecef">7i2c-core.c#L819part 794part)) {
[ode=dev_amsgss=num"> 759msgefnumc#L8-1]t1=e" name=class="sref">re=addev_w21a href="d14i3ers/i2c14i221a h>2115="L869">    "L7914i4dre.c#L782" id=""t  u>ef="smlt; 0"=e" name=class="sref">re=addev_w21="+code=dev_a_a=ad21>i2c-core.c#L794" id=""L7914i4, re.c#L782" id=""t  u>ef="1=e" name=class="sref">re=ad7">dev_w21e.c#L816" id="L8114i2c>121e.c>21>e="L857"> 857}=e" name=class="sref">re=addev_w21i2c_do_add_adauned" rhre21i2c>211ref">=e" name=class="sref">re=addev_w214i2c>1417ref=ass="sref">214i2>2119ef="+code=EAd14_writere.c#L782" id="c>14_writec#L8 =ref">res;
 759msgef="+c* LUS_READ ?=a)=e" name=class="sref">re=addev_w21name=========866 76421nam>21naef="+code=EAGAIN" s"fwitchtrode=dev_amsgss="izere.c#L782" id=""izeef=") s/i" name=class="sref">re=addev_w21>dev_warn(&/a>(de>21n2c14i2c-core.........case f">res;
 759msgef="+c* LUS_BYTEc14i:=e" name=class="sref">re=addev_w21class="sref">res;
21nref="+code=EAGAIN" s"YMaspan>i2c-core.c#L819fataalgo)) {
res;
)) {
re=addev_w2141"> 866            2141">212e="L869">    "L7914i4n>99" idbc>1k1=e" name=class="sref">re=addev_w21;
EXPORT_SYMaspan>case f">res;
 759msgef="+c* LUS_BYTE_DATAc14i:=e" name=class="sref">re=addev_w21c14i2c-core.c#L824" id="21c14>21n5="L869">    "L7914i4n>99" id2c>1472"line" nfataalgo)) {
res;
)) {
re=addev_w21_SYMBOL" class="sref">EX21_SY>21ni2c-core.c#L794" id="n>99" idbc>1k1=e" name=class="sref">re=addev_w21s/i2c14i2c-core.c#L825" 21s/i>21ne="L857"> 857    case f">res;
 759msgef="+c* LUS_WORD_DATA="L8:=e" name=class="sref">re=addev_w21
EXPORT_SYMaspan>case f">res;
re=addev_w21itdmodevice as an i2c_ad21itd>21n9ef="+code=EAGAIN" s" class="2c>1472"line" nfataalgo)) {
res;
)) {
)) {
re=addev_w21s an i2c_adapter.21s a>21s c14i2c-core.........n>99" idbc>1k1=e" name=class="sref">re=addev_w21f="d143vers/i2c14i2c-cor21f=">21s2c14i2c-core.........case f">res;
 759msgef="+c* LUS_="+cBLOCK_DATA="L8:=e" name=class="sref">re=addev_w21= besless "can 64k r mce21= b>213ref="+code=EAGAIN" s"YMaspan>fortrode=dev_amsgss=ialgo)) {
)) {
)) {
)) {
re=addev_w21.
    "L7914i4GAIN" s" class="2c>1472"line" nfataalgo)) {
res;
)) {
res;
)) {
res;
)) {
re=addev_w21, or else "comnumbersof 21, o>21s4ef">EXPORT_SYMaspan>n>99" idbc>1k1=e" name=class="sref">re=addev_w21lass=lass="sref">i2c_ada21las>21s5="L869">    "L7914i4case f">res;
 759msgef="+c* LUS_BLOCK_DATA="L8:=e" name=class="sref">re=addev_w21bufhref="+code=i2cbufada21buf>21si2c-core.c#L794" id="case f">res;
re=addev_w21" id="L8314i2c>143="line21" i>21se="L857"> 857    YMaspan>fortrode=dev_amsgss=ialgo)) {
)) {
)) {
)) {
re=addev_w21_adalass="sss="e"sref">i21_ad>21sref">EXPORT_SYMaspan>GAIN" s" class="2c>1472"line" nfataalgo)) {
res;
)) {
res;
)) {
res;
)) {
re=addev_w21ref="d1438ers/i2c14i2c-c21ref>21s9ef="+code=EAGAIN" s"n>99" idbc>1k1=e" name=class="sref">re=addev_w21a>(strmsgcode=i2c_do_add21a>(>214 c14i2c-core.........    tef="+code=dev_a  t"lins"= 1se?2141">dev_w21ef="+code=dev_amsgss=""s21ef=>21a2c14i2c-core., re=addev_w21"lins" class="sref">reco21"li>21aref="    tef="+code=dev_a  t"lins"= 1se?2143">dev_w2142" id="L8414i2c>1442"li2142">21ae="L8   tef="+code=dev_a  t"lins"= 1se?2144">dev_w21id="L8414i2c>1443"line" 21id=>21a4="L8bcvcode=i2c_do_add_ada/**="sref">unlike  tef="+code=dev_a  t"linse2145">dev_w21bufhref="+code=i2cbufada21buf>21a5="L8"L8514i2c>145="line" na* irefsmbus_xfer - execute * Lus protocol opera3ions="sref">unlike  tef="+code=dev_a  t"linse2146">dev_w21 t"lins" class="sref">re21 t">214hname"L8514i2c>145="line" na* @ef="+co: Handle to ="+>bus="sref">unlike  tef="+code=dev_a  t"linse2147">dev_w21pan>, bus="sref">unlike  tef="+code=dev_a  t"linse2148">dev_w21i2c-core.c#L846" id="L8421i2c>214ref">"L8514i2c>145="line" na* @flag>: ="+cCLIENT_* flag> (usually zero ort="+cCLIENT_PEC)="sref">unlike  tef="+code=dev_a  t"linse2149">dev_w21145="line" na* @c>14_write: ="+c* LUS_READ ort="+c* LUS_WRITEc1sref">unlike  tef="+code=dev_a  t"linse215f">dev_w21ler driver model init */21ler>21le="L8"L8514i2c>145="line" na* @-_adand: Byte dc+cop, fortprotocols which use such byt1s="sref">unlike  tef="+code=dev_a  t"linse2151">dev_w21 transmitted, else error21 tr>215=adap"L8514i2c>145="line" na* @protocol: * Lus protocol opera3ion to execute, such as ="+c* LUS_PROC_CALv="sref">unlike  tef="+code=dev_a  t"linse2152">dev_w21>145="line" name=86621>14>21lref=""L8514i2c>145="line" na* @ ata: Data to be c>14 ortwrittenc#sref">unlike  tef="+code=dev_a  t"linse2153">dev_w21>recous=href="+code=i2cc21>re>21le="L8"L8514i2c>145="line" na*c#sref">unlike  tef="+code=dev_a  t"linse2154">dev_w21-core.c#L853" id="L8514i21-co>2154="L8bcvcode=i2c_do_add_adaa* This executes cod* Lus protocol opera3ion, cod., unlike  tef="+code=dev_a  t"linse2155">dev_w21L" class="sref">EXPORT_S21L" >2155="L8"L8514i2c>145="line" na* errno ;
unlike  tef="+code=dev_a  t"linse2156">dev_w21s/i2c14i2c-core.c#L854" 21s/i>215hname"L8514i2c>145="line" na*s="sref">unlike  tef="+code=dev_a  t"linse2157">dev_w21>
res;
7f="+code=adaps" class="sre65" id="L8614i2c>146hr"sre65" id=ef="+*i2c-core.c#L81965" id="L8614i2c>146href="+code=Ecl2c>1472"line" nu="+code=dev>146hru>i2c-coi2c-core.c#L81965841">                 ?=aclunsigned shorode=adaps" class=flag>re.c#L782" id="flag>ef="i>unlike  tef="+code=dev_a  t"linse2158">dev_w21vedmodevice as an i2c_ad21ved>21lref">EXPORT_SYMaspan>d="char"2c>1472"line" nc>14_writere.c#L782" id="c>14_writec#L8cl2c>1472"line" nu8ame="L794"> 794uref">E2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8,72c>1466ref="+code=Eprotocolame="L794"> 794protocolef="i>unlike  tef="+code=dev_a  t"linse2159">dev_w21e as an i2c_adapter.21l9ef="+code=EAGAIN" s""""union f">res;
)) {
)) {
re=addev_w21ef="d1459ers/i2c14i2c-co21ef=>21efc14is/i" name=class="sref">re=addev_w21= besless "can 64k r mce21= b>21e2c14i2c-core.unsigned long f">res;
re.c#L782" id="orig_jiffie>ef="1=e" name=class="sref">re=addev_w21ter.
1466ref="+code=Etryre.c#L782" id="tryef="1=e" name=class="sref">re=addev_w21rno, or else "comnumbers21rno>216e="L869">    ode=dev_amsgss="= besless "" id=""3ref="+f">res;
re.c#L782" id="re>ef="1=e" name=class="sref">re=addev_w21c_adaclass=lass="sref">i21c_a>21e4ef">=e" name=class="sref">re=addev_w21bufhref="+code=i2cbufada21buf>21e5="L869">    14i2c-core.c#L8flag>re.c#L782" id="flag>ef=" i2c14ref">res;
 759msgef="+cM_TEN ?=a |ef">res;
 759msgef="+cCLIENT_PEC ?=a |ef">res;
 759msgef="+cCLIENT_SCCBef="1=e" name=class="sref">re=addev_w21_adalass="sss="e"sref">i21_ad>21ei2c-c=e" name=class="sref">re=addev_w21ref="d14i6ers/i2c14i2c-c21ref>21ee="L857"> 857d146hrelgode=Es/i2c14i2c-core.c#L8smbus_xfd="L8614i2c>146hrsmbus_xfd=ef">) s/i" name=class="sref">re=addev_w21gef="+code=dev_amsgss="s21gef>21eref">EXPORT_SYMaspan>f">res;
7i2c-core.c#L81965" id="L8614i2c>146href="+code=Et1=e" name=class="sref">re=addev_w217" id="L8614i2c>146="lin217" >21e9ef="=e" name=class="sref">re=addev_w21ef="+code=dev_amsgss=""s21ef=>21ef2c-core.c#L794" id="4L8514i2c>145="line" n/* Retry automa3ically on arbitra3ion lossa*s="sref">unlike  tef="+code=dev_a  t"linse2171">dev_w21"lins" class="sref">reco21"li>2172c14i2c-core.........f">res;
re.c#L782" id="orig_jiffie>ef=" ref">res;
re.c#L782" id="jiffie>ef="1=e" name=class="sref">re=addev_w2114i2c>1471"line" name="L2114i>21eref="+code=EAGAIN" s"fortrode=dev_amsgss=re>re.c#L782" id="re>ef=" re0cl2c>1472"line" ntryre.c#L782" id="tryef=" re01d2de=dev_amsgss=tryre.c#L782" id="tryef=" mlt;ref">res;
re.c#L782" id=", ef="1d2de=dev_amsgss=tryre.c#L782" id="tryef="++) s/i" name=class="sref">re=addev_w2172" id="L8714i2c>1472"li2172">217e="L869">    "L7914i4GAIN" s"ode=dev_amsgss=re>re.c#L782" id="re>ef=" reode=dev_amsgss=65" id="L8614i2c>146href="+code=Es/i2c14i2c-core.c#L8algo"L8614i2c>146hrelgode=Es/i2c14i2c-core.c#L8smbus_xfd="L8614i2c>146hrsmbus_xfd=ef">7i2c-core.c#L81965" id="L8614i2c>146href="+code=Ecl2c>1472"line" n65841">                 ?=acle=adaps" class=flag>re.c#L782" id="flag>ef="i>unlike  tef="+code=dev_a  t"linse2174">dev_w21c#L873" id="L8714i2c>14721c#L>21e4ef">EXPORT_SYMaspan>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2c>1472"line" nc>14_writere.c#L782" id="c>14_writec#L8cl2c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8,>unlike  tef="+code=dev_a  t"linse2175">dev_w212c_bus_tbufhref="+code=i212c_>21e5="L869">    "L7914i4n>99" id>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2c>1472"line" nprotocolame="L794"> 794protocolef="i"2c>1472"line" nfataalgo)) {
re=addev_w21 t"lins" class="sref">re21 t">21ei2c-core.c#L794" id="""""""""d>re.c#L782" id="re>ef=" !=r-14i2c-core.c#L8EAGAIN"> 759msgefEAGAINef=")=e" name=class="sref">re=addev_w21pan>,  857     class="""""""""bc>1k1=e" name=class="sref">re=addev_w21i2c-core.c#L776" id="L7721i2c>21eref">EXPORT_SYMaspan>99" id="d146hrtime_afid=ef">7i2c-core.c#L819jiffie>re.c#L782" id="jiffie>ef=",>unlike  tef="+code=dev_a  t"linse2179">dev_w21="d1478ers/i2c14i2c-core21="d>21e9ef="+code=EAGAIN" s" class="99" id=">>>>>>>2c>1472"line" norig_jiffie>re.c#L782" id="orig_jiffie>ef=" +eode=dev_amsgss=65" id="L8614i2c>146href="+code=Es/i2c14i2c-core.c#L8timeout"L8614i2c>146hrtimeoutef="))=e" name=class="sref">re=addev_w21ytYl received,vice as an21ytY>21ytef="+code=EAGAIN" s" class="99" id="bc>1k1=e" name=class="sref">re=addev_w21========< else error2121y2c14i2c-core.........    tef="+code=dev_a  t"lins"= 1se?2182">dev_w21>148="line" name=86621>14>21yref="+code=EAGAIN" s"f">res;
7i2c-core.c#L81965" id="L8614i2c>146href="+code=Et1=e" name=class="sref">re=addev_w21>recous=href="+code=i2cc21>re>218e="L8   tef="+code=dev_a  t"lins"= 1se?2184">dev_w21-core.c#L783" id="L7814i21-co>21y4ef">EXPORT_SYMaspan>d>re.c#L782" id="re>ef=" !=r-14i2c-core.c#L8EOPNOTSUPP 792146hrelgode=Es/i2c14i2c-core.c#L8mas+co_xfd="L8614i2c>146hrmas+co_xfd=ef=")=e" name=class="sref">re=addev_w21L" class="sref">EXPORT_S21L" >21y5="L869">    "L7914i4n>99" id, re=addev_w21 href4adapter.21yi2c-core.c#L794" id="4L8514i2c>145="line" n/*="sref">unlike  tef="+code=dev_a  t"linse2187">dev_w21 href4adapter.218e="L81cvcode=i2c_do_add_adaaaaaaaaaaaaaaaaaa* Falliback to "sresmbus_xfd=_emulaunlike  tef="+code=dev_a  t"linse2188">dev_w21 href4adapter.218ref">"L8514i2c>145="line" naaaaaaaaaaaaaaaaa* impleine"spa3ive support"fortthe * Lus opera3ion.c#sref">unlike  tef="+code=dev_a  t"linse2189">dev_w21 href4adapter.2189ef=""L8514i2c>145="line" naaaaaaaaaaaaaaaaa*s="sref">unlike  tef="+code=dev_a  t"linse219f">dev_w21========< else error2121dev_w219ref">res;
re=addev_w21i2c-core.c#L776" id="L7721i2c>219ref="+code=EA, 146hr"sresmbus_xfd=_emula7i2c-core.c#L81965" id="L8614i2c>146href="+code=Ecl2c>1472"line" n65841">                 ?=acle=adaps" class=flag>re.c#L782" id="flag>ef="i>2c>1472"line" nc>14_writere.c#L782" id="c>14_writec#L8c=e" name=class="sref">re=addev_w21o&e isdno 623 ;
219e="L869">    "L7914i4GAIN" s" class="4" id="4c>1472"line" n _adand4i3ers/i2c14i2c-_adandc#L8,72c>1472"line" nprotocolame="L794"> 794protocolef="i"2c>1472"line" nfataalgo)) {
re=addev_w21 i2c_adapter.
21<4ef">    tef="+code=dev_a  t"lins"= 1se?2195">dev_w21d mo e" nus on "comfirst21d m>217i2c-core.c#L819hrefsmbus_xfd="L8614i2c>146hr"sresmbus_xfd=ef">t1=e" name=class="sref">re=addev_w212c-core.c#L794" id="L791212c->219i2c-c=e" name=class="sref">re=addev_w21name="L857"> 857    21nam>219e="L8ode=dev_amsgss=MODULE_AUTHOR"L8614i2c>146hrMODULE_AUTHORef">7icvcode=i2c_dstr[ regiSimon G. Vogl mlt;simon@tk.uni-> 8z.ac.atii2c/ regi="sref"t1=e" name=class="sref">re=addev_w21de=dev_ama" claxf> ss=")21de=>21ode=dev_amsgss=MODULE_DESCRIPTION"> 759msgefMODULE_DESCRIPTIONef">7icvcode=i2c_dstr[ regiI2C-Lus main module/ regi="sref"t1=e" name=class="sref">re=addev_w21tef="+code=dev_a  t"lins21tef>21<9ef="ode=dev_amsgss=MODULE_LICENSE"> 759msgefMODULE_LICENSEef">7icvcode=i2c_dstr[ regiGPL/ regi="sref"t1=e" name=class="sref">re=addev_w22ef">"+code=dev_a  t"lins22ef">220tef="


"+code=fooid="> The original LXR software by the e" name=chttp://sourceforge.net/projects/lx=">LXR -_adunityef="i"this experiine"al s="sion by e" name=cmailto:lx=@devux.no">lx=@devux.noef=".
"+code=subfooid="> lx=.devux.no kindly hos 8pro.no">Redpill L 8pro ASef="i"providco of L 8ux -_nsultcod.opera3ions services since 1<95.