linux/drivers/net/phy/sfp.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2#include <linux/acpi.h>
   3#include <linux/ctype.h>
   4#include <linux/delay.h>
   5#include <linux/gpio/consumer.h>
   6#include <linux/hwmon.h>
   7#include <linux/i2c.h>
   8#include <linux/interrupt.h>
   9#include <linux/jiffies.h>
  10#include <linux/module.h>
  11#include <linux/mutex.h>
  12#include <linux/of.h>
  13#include <linux/phy.h>
  14#include <linux/platform_device.h>
  15#include <linux/rtnetlink.h>
  16#include <linux/slab.h>
  17#include <linux/workqueue.h>
  18
  19#include "mdio-i2c.h"
  20#include "sfp.h"
  21#include "swphy.h"
  22
  23enum {
  24        GPIO_MODDEF0,
  25        GPIO_LOS,
  26        GPIO_TX_FAULT,
  27        GPIO_TX_DISABLE,
  28        GPIO_RATE_SELECT,
  29        GPIO_MAX,
  30
  31        SFP_F_PRESENT = BIT(GPIO_MODDEF0),
  32        SFP_F_LOS = BIT(GPIO_LOS),
  33        SFP_F_TX_FAULT = BIT(GPIO_TX_FAULT),
  34        SFP_F_TX_DISABLE = BIT(GPIO_TX_DISABLE),
  35        SFP_F_RATE_SELECT = BIT(GPIO_RATE_SELECT),
  36
  37        SFP_E_INSERT = 0,
  38        SFP_E_REMOVE,
  39        SFP_E_DEV_DOWN,
  40        SFP_E_DEV_UP,
  41        SFP_E_TX_FAULT,
  42        SFP_E_TX_CLEAR,
  43        SFP_E_LOS_HIGH,
  44        SFP_E_LOS_LOW,
  45        SFP_E_TIMEOUT,
  46
  47        SFP_MOD_EMPTY = 0,
  48        SFP_MOD_PROBE,
  49        SFP_MOD_HPOWER,
  50        SFP_MOD_PRESENT,
  51        SFP_MOD_ERROR,
  52
  53        SFP_DEV_DOWN = 0,
  54        SFP_DEV_UP,
  55
  56        SFP_S_DOWN = 0,
  57        SFP_S_INIT,
  58        SFP_S_WAIT_LOS,
  59        SFP_S_LINK_UP,
  60        SFP_S_TX_FAULT,
  61        SFP_S_REINIT,
  62        SFP_S_TX_DISABLE,
  63};
  64
  65static const char  * const mod_state_strings[] = {
  66        [SFP_MOD_EMPTY] = "empty",
  67        [SFP_MOD_PROBE] = "probe",
  68        [SFP_MOD_HPOWER] = "hpower",
  69        [SFP_MOD_PRESENT] = "present",
  70        [SFP_MOD_ERROR] = "error",
  71};
  72
  73static const char *mod_state_to_str(unsigned short mod_state)
  74{
  75        if (mod_state >= ARRAY_SIZE(mod_state_strings))
  76                return "Unknown module state";
  77        return mod_state_strings[mod_state];
  78}
  79
  80static const char * const dev_state_strings[] = {
  81        [SFP_DEV_DOWN] = "down",
  82        [SFP_DEV_UP] = "up",
  83};
  84
  85static const char *dev_state_to_str(unsigned short dev_state)
  86{
  87        if (dev_state >= ARRAY_SIZE(dev_state_strings))
  88                return "Unknown device state";
  89        return dev_state_strings[dev_state];
  90}
  91
  92static const char * const event_strings[] = {
  93        [SFP_E_INSERT] = "insert",
  94        [SFP_E_REMOVE] = "remove",
  95        [SFP_E_DEV_DOWN] = "dev_down",
  96        [SFP_E_DEV_UP] = "dev_up",
  97        [SFP_E_TX_FAULT] = "tx_fault",
  98        [SFP_E_TX_CLEAR] = "tx_clear",
  99        [SFP_E_LOS_HIGH] = "los_high",
 100        [SFP_E_LOS_LOW] = "los_low",
 101        [SFP_E_TIMEOUT] = "timeout",
 102};
 103
 104static const char *event_to_str(unsigned short event)
 105{
 106        if (event >= ARRAY_SIZE(event_strings))
 107                return "Unknown event";
 108        return event_strings[event];
 109}
 110
 111static const char * const sm_state_strings[] = {
 112        [SFP_S_DOWN] = "down",
 113        [SFP_S_INIT] = "init",
 114        [SFP_S_WAIT_LOS] = "wait_los",
 115        [SFP_S_LINK_UP] = "link_up",
 116        [SFP_S_TX_FAULT] = "tx_fault",
 117        [SFP_S_REINIT] = "reinit",
 118        [SFP_S_TX_DISABLE] = "rx_disable",
 119};
 120
 121static const char *sm_state_to_str(unsigned short sm_state)
 122{
 123        if (sm_state >= ARRAY_SIZE(sm_state_strings))
 124                return "Unknown state";
 125        return sm_state_strings[sm_state];
 126}
 127
 128static const char *gpio_of_names[] = {
 129        "mod-def0",
 130        "los",
 131        "tx-fault",
 132        "tx-disable",
 133        "rate-select0",
 134};
 135
 136static const enum gpiod_flags gpio_flags[] = {
 137        GPIOD_IN,
 138        GPIOD_IN,
 139        GPIOD_IN,
 140        GPIOD_ASIS,
 141        GPIOD_ASIS,
 142};
 143
 144#define T_INIT_JIFFIES  msecs_to_jiffies(300)
 145#define T_RESET_US      10
 146#define T_FAULT_RECOVER msecs_to_jiffies(1000)
 147
 148/* SFP module presence detection is poor: the three MOD DEF signals are
 149 * the same length on the PCB, which means it's possible for MOD DEF 0 to
 150 * connect before the I2C bus on MOD DEF 1/2.
 151 *
 152 * The SFP MSA specifies 300ms as t_init (the time taken for TX_FAULT to
 153 * be deasserted) but makes no mention of the earliest time before we can
 154 * access the I2C EEPROM.  However, Avago modules require 300ms.
 155 */
 156#define T_PROBE_INIT    msecs_to_jiffies(300)
 157#define T_HPOWER_LEVEL  msecs_to_jiffies(300)
 158#define T_PROBE_RETRY   msecs_to_jiffies(100)
 159
 160/* SFP modules appear to always have their PHY configured for bus address
 161 * 0x56 (which with mdio-i2c, translates to a PHY address of 22).
 162 */
 163#define SFP_PHY_ADDR    22
 164
 165/* Give this long for the PHY to reset. */
 166#define T_PHY_RESET_MS  50
 167
 168struct sff_data {
 169        unsigned int gpios;
 170        bool (*module_supported)(const struct sfp_eeprom_id *id);
 171};
 172
 173struct sfp {
 174        struct device *dev;
 175        struct i2c_adapter *i2c;
 176        struct mii_bus *i2c_mii;
 177        struct sfp_bus *sfp_bus;
 178        struct phy_device *mod_phy;
 179        const struct sff_data *type;
 180        u32 max_power_mW;
 181
 182        unsigned int (*get_state)(struct sfp *);
 183        void (*set_state)(struct sfp *, unsigned int);
 184        int (*read)(struct sfp *, bool, u8, void *, size_t);
 185        int (*write)(struct sfp *, bool, u8, void *, size_t);
 186
 187        struct gpio_desc *gpio[GPIO_MAX];
 188        int gpio_irq[GPIO_MAX];
 189
 190        bool attached;
 191        struct mutex st_mutex;                  /* Protects state */
 192        unsigned int state;
 193        struct delayed_work poll;
 194        struct delayed_work timeout;
 195        struct mutex sm_mutex;                  /* Protects state machine */
 196        unsigned char sm_mod_state;
 197        unsigned char sm_dev_state;
 198        unsigned short sm_state;
 199        unsigned int sm_retries;
 200
 201        struct sfp_eeprom_id id;
 202#if IS_ENABLED(CONFIG_HWMON)
 203        struct sfp_diag diag;
 204        struct device *hwmon_dev;
 205        char *hwmon_name;
 206#endif
 207
 208};
 209
 210static bool sff_module_supported(const struct sfp_eeprom_id *id)
 211{
 212        return id->base.phys_id == SFP_PHYS_ID_SFF &&
 213               id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
 214}
 215
 216static const struct sff_data sff_data = {
 217        .gpios = SFP_F_LOS | SFP_F_TX_FAULT | SFP_F_TX_DISABLE,
 218        .module_supported = sff_module_supported,
 219};
 220
 221static bool sfp_module_supported(const struct sfp_eeprom_id *id)
 222{
 223        return id->base.phys_id == SFP_PHYS_ID_SFP &&
 224               id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
 225}
 226
 227static const struct sff_data sfp_data = {
 228        .gpios = SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT |
 229                 SFP_F_TX_DISABLE | SFP_F_RATE_SELECT,
 230        .module_supported = sfp_module_supported,
 231};
 232
 233static const struct of_device_id sfp_of_match[] = {
 234        { .compatible = "sff,sff", .data = &sff_data, },
 235        { .compatible = "sff,sfp", .data = &sfp_data, },
 236        { },
 237};
 238MODULE_DEVICE_TABLE(of, sfp_of_match);
 239
 240static unsigned long poll_jiffies;
 241
 242static unsigned int sfp_gpio_get_state(struct sfp *sfp)
 243{
 244        unsigned int i, state, v;
 245
 246        for (i = state = 0; i < GPIO_MAX; i++) {
 247                if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
 248                        continue;
 249
 250                v = gpiod_get_value_cansleep(sfp->gpio[i]);
 251                if (v)
 252                        state |= BIT(i);
 253        }
 254
 255        return state;
 256}
 257
 258static unsigned int sff_gpio_get_state(struct sfp *sfp)
 259{
 260        return sfp_gpio_get_state(sfp) | SFP_F_PRESENT;
 261}
 262
 263static void sfp_gpio_set_state(struct sfp *sfp, unsigned int state)
 264{
 265        if (state & SFP_F_PRESENT) {
 266                /* If the module is present, drive the signals */
 267                if (sfp->gpio[GPIO_TX_DISABLE])
 268                        gpiod_direction_output(sfp->gpio[GPIO_TX_DISABLE],
 269                                               state & SFP_F_TX_DISABLE);
 270                if (state & SFP_F_RATE_SELECT)
 271                        gpiod_direction_output(sfp->gpio[GPIO_RATE_SELECT],
 272                                               state & SFP_F_RATE_SELECT);
 273        } else {
 274                /* Otherwise, let them float to the pull-ups */
 275                if (sfp->gpio[GPIO_TX_DISABLE])
 276                        gpiod_direction_input(sfp->gpio[GPIO_TX_DISABLE]);
 277                if (state & SFP_F_RATE_SELECT)
 278                        gpiod_direction_input(sfp->gpio[GPIO_RATE_SELECT]);
 279        }
 280}
 281
 282static int sfp_i2c_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
 283                        size_t len)
 284{
 285        struct i2c_msg msgs[2];
 286        u8 bus_addr = a2 ? 0x51 : 0x50;
 287        size_t this_len;
 288        int ret;
 289
 290        msgs[0].addr = bus_addr;
 291        msgs[0].flags = 0;
 292        msgs[0].len = 1;
 293        msgs[0].buf = &dev_addr;
 294        msgs[1].addr = bus_addr;
 295        msgs[1].flags = I2C_M_RD;
 296        msgs[1].len = len;
 297        msgs[1].buf = buf;
 298
 299        while (len) {
 300                this_len = len;
 301                if (this_len > 16)
 302                        this_len = 16;
 303
 304                msgs[1].len = this_len;
 305
 306                ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
 307                if (ret < 0)
 308                        return ret;
 309
 310                if (ret != ARRAY_SIZE(msgs))
 311                        break;
 312
 313                msgs[1].buf += this_len;
 314                dev_addr += this_len;
 315                len -= this_len;
 316        }
 317
 318        return msgs[1].buf - (u8 *)buf;
 319}
 320
 321static int sfp_i2c_write(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
 322        size_t len)
 323{
 324        struct i2c_msg msgs[1];
 325        u8 bus_addr = a2 ? 0x51 : 0x50;
 326        int ret;
 327
 328        msgs[0].addr = bus_addr;
 329        msgs[0].flags = 0;
 330        msgs[0].len = 1 + len;
 331        msgs[0].buf = kmalloc(1 + len, GFP_KERNEL);
 332        if (!msgs[0].buf)
 333                return -ENOMEM;
 334
 335        msgs[0].buf[0] = dev_addr;
 336        memcpy(&msgs[0].buf[1], buf, len);
 337
 338        ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
 339
 340        kfree(msgs[0].buf);
 341
 342        if (ret < 0)
 343                return ret;
 344
 345        return ret == ARRAY_SIZE(msgs) ? len : 0;
 346}
 347
 348static int sfp_i2c_configure(struct sfp *sfp, struct i2c_adapter *i2c)
 349{
 350        struct mii_bus *i2c_mii;
 351        int ret;
 352
 353        if (!i2c_check_functionality(i2c, I2C_FUNC_I2C))
 354                return -EINVAL;
 355
 356        sfp->i2c = i2c;
 357        sfp->read = sfp_i2c_read;
 358        sfp->write = sfp_i2c_write;
 359
 360        i2c_mii = mdio_i2c_alloc(sfp->dev, i2c);
 361        if (IS_ERR(i2c_mii))
 362                return PTR_ERR(i2c_mii);
 363
 364        i2c_mii->name = "SFP I2C Bus";
 365        i2c_mii->phy_mask = ~0;
 366
 367        ret = mdiobus_register(i2c_mii);
 368        if (ret < 0) {
 369                mdiobus_free(i2c_mii);
 370                return ret;
 371        }
 372
 373        sfp->i2c_mii = i2c_mii;
 374
 375        return 0;
 376}
 377
 378/* Interface */
 379static unsigned int sfp_get_state(struct sfp *sfp)
 380{
 381        return sfp->get_state(sfp);
 382}
 383
 384static void sfp_set_state(struct sfp *sfp, unsigned int state)
 385{
 386        sfp->set_state(sfp, state);
 387}
 388
 389static int sfp_read(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
 390{
 391        return sfp->read(sfp, a2, addr, buf, len);
 392}
 393
 394static int sfp_write(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
 395{
 396        return sfp->write(sfp, a2, addr, buf, len);
 397}
 398
 399static unsigned int sfp_check(void *buf, size_t len)
 400{
 401        u8 *p, check;
 402
 403        for (p = buf, check = 0; len; p++, len--)
 404                check += *p;
 405
 406        return check;
 407}
 408
 409/* hwmon */
 410#if IS_ENABLED(CONFIG_HWMON)
 411static umode_t sfp_hwmon_is_visible(const void *data,
 412                                    enum hwmon_sensor_types type,
 413                                    u32 attr, int channel)
 414{
 415        const struct sfp *sfp = data;
 416
 417        switch (type) {
 418        case hwmon_temp:
 419                switch (attr) {
 420                case hwmon_temp_min_alarm:
 421                case hwmon_temp_max_alarm:
 422                case hwmon_temp_lcrit_alarm:
 423                case hwmon_temp_crit_alarm:
 424                case hwmon_temp_min:
 425                case hwmon_temp_max:
 426                case hwmon_temp_lcrit:
 427                case hwmon_temp_crit:
 428                        if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
 429                                return 0;
 430                        /* fall through */
 431                case hwmon_temp_input:
 432                        return 0444;
 433                default:
 434                        return 0;
 435                }
 436        case hwmon_in:
 437                switch (attr) {
 438                case hwmon_in_min_alarm:
 439                case hwmon_in_max_alarm:
 440                case hwmon_in_lcrit_alarm:
 441                case hwmon_in_crit_alarm:
 442                case hwmon_in_min:
 443                case hwmon_in_max:
 444                case hwmon_in_lcrit:
 445                case hwmon_in_crit:
 446                        if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
 447                                return 0;
 448                        /* fall through */
 449                case hwmon_in_input:
 450                        return 0444;
 451                default:
 452                        return 0;
 453                }
 454        case hwmon_curr:
 455                switch (attr) {
 456                case hwmon_curr_min_alarm:
 457                case hwmon_curr_max_alarm:
 458                case hwmon_curr_lcrit_alarm:
 459                case hwmon_curr_crit_alarm:
 460                case hwmon_curr_min:
 461                case hwmon_curr_max:
 462                case hwmon_curr_lcrit:
 463                case hwmon_curr_crit:
 464                        if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
 465                                return 0;
 466                        /* fall through */
 467                case hwmon_curr_input:
 468                        return 0444;
 469                default:
 470                        return 0;
 471                }
 472        case hwmon_power:
 473                /* External calibration of receive power requires
 474                 * floating point arithmetic. Doing that in the kernel
 475                 * is not easy, so just skip it. If the module does
 476                 * not require external calibration, we can however
 477                 * show receiver power, since FP is then not needed.
 478                 */
 479                if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL &&
 480                    channel == 1)
 481                        return 0;
 482                switch (attr) {
 483                case hwmon_power_min_alarm:
 484                case hwmon_power_max_alarm:
 485                case hwmon_power_lcrit_alarm:
 486                case hwmon_power_crit_alarm:
 487                case hwmon_power_min:
 488                case hwmon_power_max:
 489                case hwmon_power_lcrit:
 490                case hwmon_power_crit:
 491                        if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
 492                                return 0;
 493                        /* fall through */
 494                case hwmon_power_input:
 495                        return 0444;
 496                default:
 497                        return 0;
 498                }
 499        default:
 500                return 0;
 501        }
 502}
 503
 504static int sfp_hwmon_read_sensor(struct sfp *sfp, int reg, long *value)
 505{
 506        __be16 val;
 507        int err;
 508
 509        err = sfp_read(sfp, true, reg, &val, sizeof(val));
 510        if (err < 0)
 511                return err;
 512
 513        *value = be16_to_cpu(val);
 514
 515        return 0;
 516}
 517
 518static void sfp_hwmon_to_rx_power(long *value)
 519{
 520        *value = DIV_ROUND_CLOSEST(*value, 10);
 521}
 522
 523static void sfp_hwmon_calibrate(struct sfp *sfp, unsigned int slope, int offset,
 524                                long *value)
 525{
 526        if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL)
 527                *value = DIV_ROUND_CLOSEST(*value * slope, 256) + offset;
 528}
 529
 530static void sfp_hwmon_calibrate_temp(struct sfp *sfp, long *value)
 531{
 532        sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_t_slope),
 533                            be16_to_cpu(sfp->diag.cal_t_offset), value);
 534
 535        if (*value >= 0x8000)
 536                *value -= 0x10000;
 537
 538        *value = DIV_ROUND_CLOSEST(*value * 1000, 256);
 539}
 540
 541static void sfp_hwmon_calibrate_vcc(struct sfp *sfp, long *value)
 542{
 543        sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_v_slope),
 544                            be16_to_cpu(sfp->diag.cal_v_offset), value);
 545
 546        *value = DIV_ROUND_CLOSEST(*value, 10);
 547}
 548
 549static void sfp_hwmon_calibrate_bias(struct sfp *sfp, long *value)
 550{
 551        sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txi_slope),
 552                            be16_to_cpu(sfp->diag.cal_txi_offset), value);
 553
 554        *value = DIV_ROUND_CLOSEST(*value, 500);
 555}
 556
 557static void sfp_hwmon_calibrate_tx_power(struct sfp *sfp, long *value)
 558{
 559        sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txpwr_slope),
 560                            be16_to_cpu(sfp->diag.cal_txpwr_offset), value);
 561
 562        *value = DIV_ROUND_CLOSEST(*value, 10);
 563}
 564
 565static int sfp_hwmon_read_temp(struct sfp *sfp, int reg, long *value)
 566{
 567        int err;
 568
 569        err = sfp_hwmon_read_sensor(sfp, reg, value);
 570        if (err < 0)
 571                return err;
 572
 573        sfp_hwmon_calibrate_temp(sfp, value);
 574
 575        return 0;
 576}
 577
 578static int sfp_hwmon_read_vcc(struct sfp *sfp, int reg, long *value)
 579{
 580        int err;
 581
 582        err = sfp_hwmon_read_sensor(sfp, reg, value);
 583        if (err < 0)
 584                return err;
 585
 586        sfp_hwmon_calibrate_vcc(sfp, value);
 587
 588        return 0;
 589}
 590
 591static int sfp_hwmon_read_bias(struct sfp *sfp, int reg, long *value)
 592{
 593        int err;
 594
 595        err = sfp_hwmon_read_sensor(sfp, reg, value);
 596        if (err < 0)
 597                return err;
 598
 599        sfp_hwmon_calibrate_bias(sfp, value);
 600
 601        return 0;
 602}
 603
 604static int sfp_hwmon_read_tx_power(struct sfp *sfp, int reg, long *value)
 605{
 606        int err;
 607
 608        err = sfp_hwmon_read_sensor(sfp, reg, value);
 609        if (err < 0)
 610                return err;
 611
 612        sfp_hwmon_calibrate_tx_power(sfp, value);
 613
 614        return 0;
 615}
 616
 617static int sfp_hwmon_read_rx_power(struct sfp *sfp, int reg, long *value)
 618{
 619        int err;
 620
 621        err = sfp_hwmon_read_sensor(sfp, reg, value);
 622        if (err < 0)
 623                return err;
 624
 625        sfp_hwmon_to_rx_power(value);
 626
 627        return 0;
 628}
 629
 630static int sfp_hwmon_temp(struct sfp *sfp, u32 attr, long *value)
 631{
 632        u8 status;
 633        int err;
 634
 635        switch (attr) {
 636        case hwmon_temp_input:
 637                return sfp_hwmon_read_temp(sfp, SFP_TEMP, value);
 638
 639        case hwmon_temp_lcrit:
 640                *value = be16_to_cpu(sfp->diag.temp_low_alarm);
 641                sfp_hwmon_calibrate_temp(sfp, value);
 642                return 0;
 643
 644        case hwmon_temp_min:
 645                *value = be16_to_cpu(sfp->diag.temp_low_warn);
 646                sfp_hwmon_calibrate_temp(sfp, value);
 647                return 0;
 648        case hwmon_temp_max:
 649                *value = be16_to_cpu(sfp->diag.temp_high_warn);
 650                sfp_hwmon_calibrate_temp(sfp, value);
 651                return 0;
 652
 653        case hwmon_temp_crit:
 654                *value = be16_to_cpu(sfp->diag.temp_high_alarm);
 655                sfp_hwmon_calibrate_temp(sfp, value);
 656                return 0;
 657
 658        case hwmon_temp_lcrit_alarm:
 659                err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
 660                if (err < 0)
 661                        return err;
 662
 663                *value = !!(status & SFP_ALARM0_TEMP_LOW);
 664                return 0;
 665
 666        case hwmon_temp_min_alarm:
 667                err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
 668                if (err < 0)
 669                        return err;
 670
 671                *value = !!(status & SFP_WARN0_TEMP_LOW);
 672                return 0;
 673
 674        case hwmon_temp_max_alarm:
 675                err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
 676                if (err < 0)
 677                        return err;
 678
 679                *value = !!(status & SFP_WARN0_TEMP_HIGH);
 680                return 0;
 681
 682        case hwmon_temp_crit_alarm:
 683                err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
 684                if (err < 0)
 685                        return err;
 686
 687                *value = !!(status & SFP_ALARM0_TEMP_HIGH);
 688                return 0;
 689        default:
 690                return -EOPNOTSUPP;
 691        }
 692
 693        return -EOPNOTSUPP;
 694}
 695
 696static int sfp_hwmon_vcc(struct sfp *sfp, u32 attr, long *value)
 697{
 698        u8 status;
 699        int err;
 700
 701        switch (attr) {
 702        case hwmon_in_input:
 703                return sfp_hwmon_read_vcc(sfp, SFP_VCC, value);
 704
 705        case hwmon_in_lcrit:
 706                *value = be16_to_cpu(sfp->diag.volt_low_alarm);
 707                sfp_hwmon_calibrate_vcc(sfp, value);
 708                return 0;
 709
 710        case hwmon_in_min:
 711                *value = be16_to_cpu(sfp->diag.volt_low_warn);
 712                sfp_hwmon_calibrate_vcc(sfp, value);
 713                return 0;
 714
 715        case hwmon_in_max:
 716                *value = be16_to_cpu(sfp->diag.volt_high_warn);
 717                sfp_hwmon_calibrate_vcc(sfp, value);
 718                return 0;
 719
 720        case hwmon_in_crit:
 721                *value = be16_to_cpu(sfp->diag.volt_high_alarm);
 722                sfp_hwmon_calibrate_vcc(sfp, value);
 723                return 0;
 724
 725        case hwmon_in_lcrit_alarm:
 726                err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
 727                if (err < 0)
 728                        return err;
 729
 730                *value = !!(status & SFP_ALARM0_VCC_LOW);
 731                return 0;
 732
 733        case hwmon_in_min_alarm:
 734                err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
 735                if (err < 0)
 736                        return err;
 737
 738                *value = !!(status & SFP_WARN0_VCC_LOW);
 739                return 0;
 740
 741        case hwmon_in_max_alarm:
 742                err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
 743                if (err < 0)
 744                        return err;
 745
 746                *value = !!(status & SFP_WARN0_VCC_HIGH);
 747                return 0;
 748
 749        case hwmon_in_crit_alarm:
 750                err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
 751                if (err < 0)
 752                        return err;
 753
 754                *value = !!(status & SFP_ALARM0_VCC_HIGH);
 755                return 0;
 756        default:
 757                return -EOPNOTSUPP;
 758        }
 759
 760        return -EOPNOTSUPP;
 761}
 762
 763static int sfp_hwmon_bias(struct sfp *sfp, u32 attr, long *value)
 764{
 765        u8 status;
 766        int err;
 767
 768        switch (attr) {
 769        case hwmon_curr_input:
 770                return sfp_hwmon_read_bias(sfp, SFP_TX_BIAS, value);
 771
 772        case hwmon_curr_lcrit:
 773                *value = be16_to_cpu(sfp->diag.bias_low_alarm);
 774                sfp_hwmon_calibrate_bias(sfp, value);
 775                return 0;
 776
 777        case hwmon_curr_min:
 778                *value = be16_to_cpu(sfp->diag.bias_low_warn);
 779                sfp_hwmon_calibrate_bias(sfp, value);
 780                return 0;
 781
 782        case hwmon_curr_max:
 783                *value = be16_to_cpu(sfp->diag.bias_high_warn);
 784                sfp_hwmon_calibrate_bias(sfp, value);
 785                return 0;
 786
 787        case hwmon_curr_crit:
 788                *value = be16_to_cpu(sfp->diag.bias_high_alarm);
 789                sfp_hwmon_calibrate_bias(sfp, value);
 790                return 0;
 791
 792        case hwmon_curr_lcrit_alarm:
 793                err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
 794                if (err < 0)
 795                        return err;
 796
 797                *value = !!(status & SFP_ALARM0_TX_BIAS_LOW);
 798                return 0;
 799
 800        case hwmon_curr_min_alarm:
 801                err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
 802                if (err < 0)
 803                        return err;
 804
 805                *value = !!(status & SFP_WARN0_TX_BIAS_LOW);
 806                return 0;
 807
 808        case hwmon_curr_max_alarm:
 809                err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
 810                if (err < 0)
 811                        return err;
 812
 813                *value = !!(status & SFP_WARN0_TX_BIAS_HIGH);
 814                return 0;
 815
 816        case hwmon_curr_crit_alarm:
 817                err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
 818                if (err < 0)
 819                        return err;
 820
 821                *value = !!(status & SFP_ALARM0_TX_BIAS_HIGH);
 822                return 0;
 823        default:
 824                return -EOPNOTSUPP;
 825        }
 826
 827        return -EOPNOTSUPP;
 828}
 829
 830static int sfp_hwmon_tx_power(struct sfp *sfp, u32 attr, long *value)
 831{
 832        u8 status;
 833        int err;
 834
 835        switch (attr) {
 836        case hwmon_power_input:
 837                return sfp_hwmon_read_tx_power(sfp, SFP_TX_POWER, value);
 838
 839        case hwmon_power_lcrit:
 840                *value = be16_to_cpu(sfp->diag.txpwr_low_alarm);
 841                sfp_hwmon_calibrate_tx_power(sfp, value);
 842                return 0;
 843
 844        case hwmon_power_min:
 845                *value = be16_to_cpu(sfp->diag.txpwr_low_warn);
 846                sfp_hwmon_calibrate_tx_power(sfp, value);
 847                return 0;
 848
 849        case hwmon_power_max:
 850                *value = be16_to_cpu(sfp->diag.txpwr_high_warn);
 851                sfp_hwmon_calibrate_tx_power(sfp, value);
 852                return 0;
 853
 854        case hwmon_power_crit:
 855                *value = be16_to_cpu(sfp->diag.txpwr_high_alarm);
 856                sfp_hwmon_calibrate_tx_power(sfp, value);
 857                return 0;
 858
 859        case hwmon_power_lcrit_alarm:
 860                err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
 861                if (err < 0)
 862                        return err;
 863
 864                *value = !!(status & SFP_ALARM0_TXPWR_LOW);
 865                return 0;
 866
 867        case hwmon_power_min_alarm:
 868                err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
 869                if (err < 0)
 870                        return err;
 871
 872                *value = !!(status & SFP_WARN0_TXPWR_LOW);
 873                return 0;
 874
 875        case hwmon_power_max_alarm:
 876                err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
 877                if (err < 0)
 878                        return err;
 879
 880                *value = !!(status & SFP_WARN0_TXPWR_HIGH);
 881                return 0;
 882
 883        case hwmon_power_crit_alarm:
 884                err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
 885                if (err < 0)
 886                        return err;
 887
 888                *value = !!(status & SFP_ALARM0_TXPWR_HIGH);
 889                return 0;
 890        default:
 891                return -EOPNOTSUPP;
 892        }
 893
 894        return -EOPNOTSUPP;
 895}
 896
 897static int sfp_hwmon_rx_power(struct sfp *sfp, u32 attr, long *value)
 898{
 899        u8 status;
 900        int err;
 901
 902        switch (attr) {
 903        case hwmon_power_input:
 904                return sfp_hwmon_read_rx_power(sfp, SFP_RX_POWER, value);
 905
 906        case hwmon_power_lcrit:
 907                *value = be16_to_cpu(sfp->diag.rxpwr_low_alarm);
 908                sfp_hwmon_to_rx_power(value);
 909                return 0;
 910
 911        case hwmon_power_min:
 912                *value = be16_to_cpu(sfp->diag.rxpwr_low_warn);
 913                sfp_hwmon_to_rx_power(value);
 914                return 0;
 915
 916        case hwmon_power_max:
 917                *value = be16_to_cpu(sfp->diag.rxpwr_high_warn);
 918                sfp_hwmon_to_rx_power(value);
 919                return 0;
 920
 921        case hwmon_power_crit:
 922                *value = be16_to_cpu(sfp->diag.rxpwr_high_alarm);
 923                sfp_hwmon_to_rx_power(value);
 924                return 0;
 925
 926        case hwmon_power_lcrit_alarm:
 927                err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
 928                if (err < 0)
 929                        return err;
 930
 931                *value = !!(status & SFP_ALARM1_RXPWR_LOW);
 932                return 0;
 933
 934        case hwmon_power_min_alarm:
 935                err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
 936                if (err < 0)
 937                        return err;
 938
 939                *value = !!(status & SFP_WARN1_RXPWR_LOW);
 940                return 0;
 941
 942        case hwmon_power_max_alarm:
 943                err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
 944                if (err < 0)
 945                        return err;
 946
 947                *value = !!(status & SFP_WARN1_RXPWR_HIGH);
 948                return 0;
 949
 950        case hwmon_power_crit_alarm:
 951                err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
 952                if (err < 0)
 953                        return err;
 954
 955                *value = !!(status & SFP_ALARM1_RXPWR_HIGH);
 956                return 0;
 957        default:
 958                return -EOPNOTSUPP;
 959        }
 960
 961        return -EOPNOTSUPP;
 962}
 963
 964static int sfp_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
 965                          u32 attr, int channel, long *value)
 966{
 967        struct sfp *sfp = dev_get_drvdata(dev);
 968
 969        switch (type) {
 970        case hwmon_temp:
 971                return sfp_hwmon_temp(sfp, attr, value);
 972        case hwmon_in:
 973                return sfp_hwmon_vcc(sfp, attr, value);
 974        case hwmon_curr:
 975                return sfp_hwmon_bias(sfp, attr, value);
 976        case hwmon_power:
 977                switch (channel) {
 978                case 0:
 979                        return sfp_hwmon_tx_power(sfp, attr, value);
 980                case 1:
 981                        return sfp_hwmon_rx_power(sfp, attr, value);
 982                default:
 983                        return -EOPNOTSUPP;
 984                }
 985        default:
 986                return -EOPNOTSUPP;
 987        }
 988}
 989
 990static const struct hwmon_ops sfp_hwmon_ops = {
 991        .is_visible = sfp_hwmon_is_visible,
 992        .read = sfp_hwmon_read,
 993};
 994
 995static u32 sfp_hwmon_chip_config[] = {
 996        HWMON_C_REGISTER_TZ,
 997        0,
 998};
 999
1000static const struct hwmon_channel_info sfp_hwmon_chip = {
1001        .type = hwmon_chip,
1002        .config = sfp_hwmon_chip_config,
1003};
1004
1005static u32 sfp_hwmon_temp_config[] = {
1006        HWMON_T_INPUT |
1007        HWMON_T_MAX | HWMON_T_MIN |
1008        HWMON_T_MAX_ALARM | HWMON_T_MIN_ALARM |
1009        HWMON_T_CRIT | HWMON_T_LCRIT |
1010        HWMON_T_CRIT_ALARM | HWMON_T_LCRIT_ALARM,
1011        0,
1012};
1013
1014static const struct hwmon_channel_info sfp_hwmon_temp_channel_info = {
1015        .type = hwmon_temp,
1016        .config = sfp_hwmon_temp_config,
1017};
1018
1019static u32 sfp_hwmon_vcc_config[] = {
1020        HWMON_I_INPUT |
1021        HWMON_I_MAX | HWMON_I_MIN |
1022        HWMON_I_MAX_ALARM | HWMON_I_MIN_ALARM |
1023        HWMON_I_CRIT | HWMON_I_LCRIT |
1024        HWMON_I_CRIT_ALARM | HWMON_I_LCRIT_ALARM,
1025        0,
1026};
1027
1028static const struct hwmon_channel_info sfp_hwmon_vcc_channel_info = {
1029        .type = hwmon_in,
1030        .config = sfp_hwmon_vcc_config,
1031};
1032
1033static u32 sfp_hwmon_bias_config[] = {
1034        HWMON_C_INPUT |
1035        HWMON_C_MAX | HWMON_C_MIN |
1036        HWMON_C_MAX_ALARM | HWMON_C_MIN_ALARM |
1037        HWMON_C_CRIT | HWMON_C_LCRIT |
1038        HWMON_C_CRIT_ALARM | HWMON_C_LCRIT_ALARM,
1039        0,
1040};
1041
1042static const struct hwmon_channel_info sfp_hwmon_bias_channel_info = {
1043        .type = hwmon_curr,
1044        .config = sfp_hwmon_bias_config,
1045};
1046
1047static u32 sfp_hwmon_power_config[] = {
1048        /* Transmit power */
1049        HWMON_P_INPUT |
1050        HWMON_P_MAX | HWMON_P_MIN |
1051        HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1052        HWMON_P_CRIT | HWMON_P_LCRIT |
1053        HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM,
1054        /* Receive power */
1055        HWMON_P_INPUT |
1056        HWMON_P_MAX | HWMON_P_MIN |
1057        HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1058        HWMON_P_CRIT | HWMON_P_LCRIT |
1059        HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM,
1060        0,
1061};
1062
1063static const struct hwmon_channel_info sfp_hwmon_power_channel_info = {
1064        .type = hwmon_power,
1065        .config = sfp_hwmon_power_config,
1066};
1067
1068static const struct hwmon_channel_info *sfp_hwmon_info[] = {
1069        &sfp_hwmon_chip,
1070        &sfp_hwmon_vcc_channel_info,
1071        &sfp_hwmon_temp_channel_info,
1072        &sfp_hwmon_bias_channel_info,
1073        &sfp_hwmon_power_channel_info,
1074        NULL,
1075};
1076
1077static const struct hwmon_chip_info sfp_hwmon_chip_info = {
1078        .ops = &sfp_hwmon_ops,
1079        .info = sfp_hwmon_info,
1080};
1081
1082static int sfp_hwmon_insert(struct sfp *sfp)
1083{
1084        int err, i;
1085
1086        if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE)
1087                return 0;
1088
1089        if (!(sfp->id.ext.diagmon & SFP_DIAGMON_DDM))
1090                return 0;
1091
1092        if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
1093                /* This driver in general does not support address
1094                 * change.
1095                 */
1096                return 0;
1097
1098        err = sfp_read(sfp, true, 0, &sfp->diag, sizeof(sfp->diag));
1099        if (err < 0)
1100                return err;
1101
1102        sfp->hwmon_name = kstrdup(dev_name(sfp->dev), GFP_KERNEL);
1103        if (!sfp->hwmon_name)
1104                return -ENODEV;
1105
1106        for (i = 0; sfp->hwmon_name[i]; i++)
1107                if (hwmon_is_bad_char(sfp->hwmon_name[i]))
1108                        sfp->hwmon_name[i] = '_';
1109
1110        sfp->hwmon_dev = hwmon_device_register_with_info(sfp->dev,
1111                                                         sfp->hwmon_name, sfp,
1112                                                         &sfp_hwmon_chip_info,
1113                                                         NULL);
1114
1115        return PTR_ERR_OR_ZERO(sfp->hwmon_dev);
1116}
1117
1118static void sfp_hwmon_remove(struct sfp *sfp)
1119{
1120        if (!IS_ERR_OR_NULL(sfp->hwmon_dev)) {
1121                hwmon_device_unregister(sfp->hwmon_dev);
1122                sfp->hwmon_dev = NULL;
1123                kfree(sfp->hwmon_name);
1124        }
1125}
1126#else
1127static int sfp_hwmon_insert(struct sfp *sfp)
1128{
1129        return 0;
1130}
1131
1132static void sfp_hwmon_remove(struct sfp *sfp)
1133{
1134}
1135#endif
1136
1137/* Helpers */
1138static void sfp_module_tx_disable(struct sfp *sfp)
1139{
1140        dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1141                sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 1);
1142        sfp->state |= SFP_F_TX_DISABLE;
1143        sfp_set_state(sfp, sfp->state);
1144}
1145
1146static void sfp_module_tx_enable(struct sfp *sfp)
1147{
1148        dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1149                sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 0);
1150        sfp->state &= ~SFP_F_TX_DISABLE;
1151        sfp_set_state(sfp, sfp->state);
1152}
1153
1154static void sfp_module_tx_fault_reset(struct sfp *sfp)
1155{
1156        unsigned int state = sfp->state;
1157
1158        if (state & SFP_F_TX_DISABLE)
1159                return;
1160
1161        sfp_set_state(sfp, state | SFP_F_TX_DISABLE);
1162
1163        udelay(T_RESET_US);
1164
1165        sfp_set_state(sfp, state);
1166}
1167
1168/* SFP state machine */
1169static void sfp_sm_set_timer(struct sfp *sfp, unsigned int timeout)
1170{
1171        if (timeout)
1172                mod_delayed_work(system_power_efficient_wq, &sfp->timeout,
1173                                 timeout);
1174        else
1175                cancel_delayed_work(&sfp->timeout);
1176}
1177
1178static void sfp_sm_next(struct sfp *sfp, unsigned int state,
1179                        unsigned int timeout)
1180{
1181        sfp->sm_state = state;
1182        sfp_sm_set_timer(sfp, timeout);
1183}
1184
1185static void sfp_sm_ins_next(struct sfp *sfp, unsigned int state,
1186                            unsigned int timeout)
1187{
1188        sfp->sm_mod_state = state;
1189        sfp_sm_set_timer(sfp, timeout);
1190}
1191
1192static void sfp_sm_phy_detach(struct sfp *sfp)
1193{
1194        phy_stop(sfp->mod_phy);
1195        sfp_remove_phy(sfp->sfp_bus);
1196        phy_device_remove(sfp->mod_phy);
1197        phy_device_free(sfp->mod_phy);
1198        sfp->mod_phy = NULL;
1199}
1200
1201static void sfp_sm_probe_phy(struct sfp *sfp)
1202{
1203        struct phy_device *phy;
1204        int err;
1205
1206        msleep(T_PHY_RESET_MS);
1207
1208        phy = mdiobus_scan(sfp->i2c_mii, SFP_PHY_ADDR);
1209        if (phy == ERR_PTR(-ENODEV)) {
1210                dev_info(sfp->dev, "no PHY detected\n");
1211                return;
1212        }
1213        if (IS_ERR(phy)) {
1214                dev_err(sfp->dev, "mdiobus scan returned %ld\n", PTR_ERR(phy));
1215                return;
1216        }
1217
1218        err = sfp_add_phy(sfp->sfp_bus, phy);
1219        if (err) {
1220                phy_device_remove(phy);
1221                phy_device_free(phy);
1222                dev_err(sfp->dev, "sfp_add_phy failed: %d\n", err);
1223                return;
1224        }
1225
1226        sfp->mod_phy = phy;
1227        phy_start(phy);
1228}
1229
1230static void sfp_sm_link_up(struct sfp *sfp)
1231{
1232        sfp_link_up(sfp->sfp_bus);
1233        sfp_sm_next(sfp, SFP_S_LINK_UP, 0);
1234}
1235
1236static void sfp_sm_link_down(struct sfp *sfp)
1237{
1238        sfp_link_down(sfp->sfp_bus);
1239}
1240
1241static void sfp_sm_link_check_los(struct sfp *sfp)
1242{
1243        unsigned int los = sfp->state & SFP_F_LOS;
1244
1245        /* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
1246         * are set, we assume that no LOS signal is available.
1247         */
1248        if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED))
1249                los ^= SFP_F_LOS;
1250        else if (!(sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL)))
1251                los = 0;
1252
1253        if (los)
1254                sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
1255        else
1256                sfp_sm_link_up(sfp);
1257}
1258
1259static bool sfp_los_event_active(struct sfp *sfp, unsigned int event)
1260{
1261        return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) &&
1262                event == SFP_E_LOS_LOW) ||
1263               (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) &&
1264                event == SFP_E_LOS_HIGH);
1265}
1266
1267static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event)
1268{
1269        return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) &&
1270                event == SFP_E_LOS_HIGH) ||
1271               (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) &&
1272                event == SFP_E_LOS_LOW);
1273}
1274
1275static void sfp_sm_fault(struct sfp *sfp, bool warn)
1276{
1277        if (sfp->sm_retries && !--sfp->sm_retries) {
1278                dev_err(sfp->dev,
1279                        "module persistently indicates fault, disabling\n");
1280                sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0);
1281        } else {
1282                if (warn)
1283                        dev_err(sfp->dev, "module transmit fault indicated\n");
1284
1285                sfp_sm_next(sfp, SFP_S_TX_FAULT, T_FAULT_RECOVER);
1286        }
1287}
1288
1289static void sfp_sm_mod_init(struct sfp *sfp)
1290{
1291        sfp_module_tx_enable(sfp);
1292
1293        /* Wait t_init before indicating that the link is up, provided the
1294         * current state indicates no TX_FAULT.  If TX_FAULT clears before
1295         * this time, that's fine too.
1296         */
1297        sfp_sm_next(sfp, SFP_S_INIT, T_INIT_JIFFIES);
1298        sfp->sm_retries = 5;
1299
1300        /* Setting the serdes link mode is guesswork: there's no
1301         * field in the EEPROM which indicates what mode should
1302         * be used.
1303         *
1304         * If it's a gigabit-only fiber module, it probably does
1305         * not have a PHY, so switch to 802.3z negotiation mode.
1306         * Otherwise, switch to SGMII mode (which is required to
1307         * support non-gigabit speeds) and probe for a PHY.
1308         */
1309        if (sfp->id.base.e1000_base_t ||
1310            sfp->id.base.e100_base_lx ||
1311            sfp->id.base.e100_base_fx)
1312                sfp_sm_probe_phy(sfp);
1313}
1314
1315static int sfp_sm_mod_hpower(struct sfp *sfp)
1316{
1317        u32 power;
1318        u8 val;
1319        int err;
1320
1321        power = 1000;
1322        if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_POWER_DECL))
1323                power = 1500;
1324        if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL))
1325                power = 2000;
1326
1327        if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE &&
1328            (sfp->id.ext.diagmon & (SFP_DIAGMON_DDM | SFP_DIAGMON_ADDRMODE)) !=
1329            SFP_DIAGMON_DDM) {
1330                /* The module appears not to implement bus address 0xa2,
1331                 * or requires an address change sequence, so assume that
1332                 * the module powers up in the indicated power mode.
1333                 */
1334                if (power > sfp->max_power_mW) {
1335                        dev_err(sfp->dev,
1336                                "Host does not support %u.%uW modules\n",
1337                                power / 1000, (power / 100) % 10);
1338                        return -EINVAL;
1339                }
1340                return 0;
1341        }
1342
1343        if (power > sfp->max_power_mW) {
1344                dev_warn(sfp->dev,
1345                         "Host does not support %u.%uW modules, module left in power mode 1\n",
1346                         power / 1000, (power / 100) % 10);
1347                return 0;
1348        }
1349
1350        if (power <= 1000)
1351                return 0;
1352
1353        err = sfp_read(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
1354        if (err != sizeof(val)) {
1355                dev_err(sfp->dev, "Failed to read EEPROM: %d\n", err);
1356                err = -EAGAIN;
1357                goto err;
1358        }
1359
1360        val |= BIT(0);
1361
1362        err = sfp_write(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
1363        if (err != sizeof(val)) {
1364                dev_err(sfp->dev, "Failed to write EEPROM: %d\n", err);
1365                err = -EAGAIN;
1366                goto err;
1367        }
1368
1369        dev_info(sfp->dev, "Module switched to %u.%uW power level\n",
1370                 power / 1000, (power / 100) % 10);
1371        return T_HPOWER_LEVEL;
1372
1373err:
1374        return err;
1375}
1376
1377static int sfp_sm_mod_probe(struct sfp *sfp)
1378{
1379        /* SFP module inserted - read I2C data */
1380        struct sfp_eeprom_id id;
1381        bool cotsworks;
1382        u8 check;
1383        int ret;
1384
1385        ret = sfp_read(sfp, false, 0, &id, sizeof(id));
1386        if (ret < 0) {
1387                dev_err(sfp->dev, "failed to read EEPROM: %d\n", ret);
1388                return -EAGAIN;
1389        }
1390
1391        if (ret != sizeof(id)) {
1392                dev_err(sfp->dev, "EEPROM short read: %d\n", ret);
1393                return -EAGAIN;
1394        }
1395
1396        /* Cotsworks do not seem to update the checksums when they
1397         * do the final programming with the final module part number,
1398         * serial number and date code.
1399         */
1400        cotsworks = !memcmp(id.base.vendor_name, "COTSWORKS       ", 16);
1401
1402        /* Validate the checksum over the base structure */
1403        check = sfp_check(&id.base, sizeof(id.base) - 1);
1404        if (check != id.base.cc_base) {
1405                if (cotsworks) {
1406                        dev_warn(sfp->dev,
1407                                 "EEPROM base structure checksum failure (0x%02x != 0x%02x)\n",
1408                                 check, id.base.cc_base);
1409                } else {
1410                        dev_err(sfp->dev,
1411                                "EEPROM base structure checksum failure: 0x%02x != 0x%02x\n",
1412                                check, id.base.cc_base);
1413                        print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
1414                                       16, 1, &id, sizeof(id), true);
1415                        return -EINVAL;
1416                }
1417        }
1418
1419        check = sfp_check(&id.ext, sizeof(id.ext) - 1);
1420        if (check != id.ext.cc_ext) {
1421                if (cotsworks) {
1422                        dev_warn(sfp->dev,
1423                                 "EEPROM extended structure checksum failure (0x%02x != 0x%02x)\n",
1424                                 check, id.ext.cc_ext);
1425                } else {
1426                        dev_err(sfp->dev,
1427                                "EEPROM extended structure checksum failure: 0x%02x != 0x%02x\n",
1428                                check, id.ext.cc_ext);
1429                        print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
1430                                       16, 1, &id, sizeof(id), true);
1431                        memset(&id.ext, 0, sizeof(id.ext));
1432                }
1433        }
1434
1435        sfp->id = id;
1436
1437        dev_info(sfp->dev, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n",
1438                 (int)sizeof(id.base.vendor_name), id.base.vendor_name,
1439                 (int)sizeof(id.base.vendor_pn), id.base.vendor_pn,
1440                 (int)sizeof(id.base.vendor_rev), id.base.vendor_rev,
1441                 (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn,
1442                 (int)sizeof(id.ext.datecode), id.ext.datecode);
1443
1444        /* Check whether we support this module */
1445        if (!sfp->type->module_supported(&sfp->id)) {
1446                dev_err(sfp->dev,
1447                        "module is not supported - phys id 0x%02x 0x%02x\n",
1448                        sfp->id.base.phys_id, sfp->id.base.phys_ext_id);
1449                return -EINVAL;
1450        }
1451
1452        /* If the module requires address swap mode, warn about it */
1453        if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
1454                dev_warn(sfp->dev,
1455                         "module address swap to access page 0xA2 is not supported.\n");
1456
1457        ret = sfp_hwmon_insert(sfp);
1458        if (ret < 0)
1459                return ret;
1460
1461        ret = sfp_module_insert(sfp->sfp_bus, &sfp->id);
1462        if (ret < 0)
1463                return ret;
1464
1465        return sfp_sm_mod_hpower(sfp);
1466}
1467
1468static void sfp_sm_mod_remove(struct sfp *sfp)
1469{
1470        sfp_module_remove(sfp->sfp_bus);
1471
1472        sfp_hwmon_remove(sfp);
1473
1474        if (sfp->mod_phy)
1475                sfp_sm_phy_detach(sfp);
1476
1477        sfp_module_tx_disable(sfp);
1478
1479        memset(&sfp->id, 0, sizeof(sfp->id));
1480
1481        dev_info(sfp->dev, "module removed\n");
1482}
1483
1484static void sfp_sm_event(struct sfp *sfp, unsigned int event)
1485{
1486        mutex_lock(&sfp->sm_mutex);
1487
1488        dev_dbg(sfp->dev, "SM: enter %s:%s:%s event %s\n",
1489                mod_state_to_str(sfp->sm_mod_state),
1490                dev_state_to_str(sfp->sm_dev_state),
1491                sm_state_to_str(sfp->sm_state),
1492                event_to_str(event));
1493
1494        /* This state machine tracks the insert/remove state of
1495         * the module, and handles probing the on-board EEPROM.
1496         */
1497        switch (sfp->sm_mod_state) {
1498        default:
1499                if (event == SFP_E_INSERT && sfp->attached) {
1500                        sfp_module_tx_disable(sfp);
1501                        sfp_sm_ins_next(sfp, SFP_MOD_PROBE, T_PROBE_INIT);
1502                }
1503                break;
1504
1505        case SFP_MOD_PROBE:
1506                if (event == SFP_E_REMOVE) {
1507                        sfp_sm_ins_next(sfp, SFP_MOD_EMPTY, 0);
1508                } else if (event == SFP_E_TIMEOUT) {
1509                        int val = sfp_sm_mod_probe(sfp);
1510
1511                        if (val == 0)
1512                                sfp_sm_ins_next(sfp, SFP_MOD_PRESENT, 0);
1513                        else if (val > 0)
1514                                sfp_sm_ins_next(sfp, SFP_MOD_HPOWER, val);
1515                        else if (val != -EAGAIN)
1516                                sfp_sm_ins_next(sfp, SFP_MOD_ERROR, 0);
1517                        else
1518                                sfp_sm_set_timer(sfp, T_PROBE_RETRY);
1519                }
1520                break;
1521
1522        case SFP_MOD_HPOWER:
1523                if (event == SFP_E_TIMEOUT) {
1524                        sfp_sm_ins_next(sfp, SFP_MOD_PRESENT, 0);
1525                        break;
1526                }
1527                /* fallthrough */
1528        case SFP_MOD_PRESENT:
1529        case SFP_MOD_ERROR:
1530                if (event == SFP_E_REMOVE) {
1531                        sfp_sm_mod_remove(sfp);
1532                        sfp_sm_ins_next(sfp, SFP_MOD_EMPTY, 0);
1533                }
1534                break;
1535        }
1536
1537        /* This state machine tracks the netdev up/down state */
1538        switch (sfp->sm_dev_state) {
1539        default:
1540                if (event == SFP_E_DEV_UP)
1541                        sfp->sm_dev_state = SFP_DEV_UP;
1542                break;
1543
1544        case SFP_DEV_UP:
1545                if (event == SFP_E_DEV_DOWN) {
1546                        /* If the module has a PHY, avoid raising TX disable
1547                         * as this resets the PHY. Otherwise, raise it to
1548                         * turn the laser off.
1549                         */
1550                        if (!sfp->mod_phy)
1551                                sfp_module_tx_disable(sfp);
1552                        sfp->sm_dev_state = SFP_DEV_DOWN;
1553                }
1554                break;
1555        }
1556
1557        /* Some events are global */
1558        if (sfp->sm_state != SFP_S_DOWN &&
1559            (sfp->sm_mod_state != SFP_MOD_PRESENT ||
1560             sfp->sm_dev_state != SFP_DEV_UP)) {
1561                if (sfp->sm_state == SFP_S_LINK_UP &&
1562                    sfp->sm_dev_state == SFP_DEV_UP)
1563                        sfp_sm_link_down(sfp);
1564                if (sfp->mod_phy)
1565                        sfp_sm_phy_detach(sfp);
1566                sfp_sm_next(sfp, SFP_S_DOWN, 0);
1567                mutex_unlock(&sfp->sm_mutex);
1568                return;
1569        }
1570
1571        /* The main state machine */
1572        switch (sfp->sm_state) {
1573        case SFP_S_DOWN:
1574                if (sfp->sm_mod_state == SFP_MOD_PRESENT &&
1575                    sfp->sm_dev_state == SFP_DEV_UP)
1576                        sfp_sm_mod_init(sfp);
1577                break;
1578
1579        case SFP_S_INIT:
1580                if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT)
1581                        sfp_sm_fault(sfp, true);
1582                else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR)
1583                        sfp_sm_link_check_los(sfp);
1584                break;
1585
1586        case SFP_S_WAIT_LOS:
1587                if (event == SFP_E_TX_FAULT)
1588                        sfp_sm_fault(sfp, true);
1589                else if (sfp_los_event_inactive(sfp, event))
1590                        sfp_sm_link_up(sfp);
1591                break;
1592
1593        case SFP_S_LINK_UP:
1594                if (event == SFP_E_TX_FAULT) {
1595                        sfp_sm_link_down(sfp);
1596                        sfp_sm_fault(sfp, true);
1597                } else if (sfp_los_event_active(sfp, event)) {
1598                        sfp_sm_link_down(sfp);
1599                        sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
1600                }
1601                break;
1602
1603        case SFP_S_TX_FAULT:
1604                if (event == SFP_E_TIMEOUT) {
1605                        sfp_module_tx_fault_reset(sfp);
1606                        sfp_sm_next(sfp, SFP_S_REINIT, T_INIT_JIFFIES);
1607                }
1608                break;
1609
1610        case SFP_S_REINIT:
1611                if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
1612                        sfp_sm_fault(sfp, false);
1613                } else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
1614                        dev_info(sfp->dev, "module transmit fault recovered\n");
1615                        sfp_sm_link_check_los(sfp);
1616                }
1617                break;
1618
1619        case SFP_S_TX_DISABLE:
1620                break;
1621        }
1622
1623        dev_dbg(sfp->dev, "SM: exit %s:%s:%s\n",
1624                mod_state_to_str(sfp->sm_mod_state),
1625                dev_state_to_str(sfp->sm_dev_state),
1626                sm_state_to_str(sfp->sm_state));
1627
1628        mutex_unlock(&sfp->sm_mutex);
1629}
1630
1631static void sfp_attach(struct sfp *sfp)
1632{
1633        sfp->attached = true;
1634        if (sfp->state & SFP_F_PRESENT)
1635                sfp_sm_event(sfp, SFP_E_INSERT);
1636}
1637
1638static void sfp_detach(struct sfp *sfp)
1639{
1640        sfp->attached = false;
1641        sfp_sm_event(sfp, SFP_E_REMOVE);
1642}
1643
1644static void sfp_start(struct sfp *sfp)
1645{
1646        sfp_sm_event(sfp, SFP_E_DEV_UP);
1647}
1648
1649static void sfp_stop(struct sfp *sfp)
1650{
1651        sfp_sm_event(sfp, SFP_E_DEV_DOWN);
1652}
1653
1654static int sfp_module_info(struct sfp *sfp, struct ethtool_modinfo *modinfo)
1655{
1656        /* locking... and check module is present */
1657
1658        if (sfp->id.ext.sff8472_compliance &&
1659            !(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)) {
1660                modinfo->type = ETH_MODULE_SFF_8472;
1661                modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
1662        } else {
1663                modinfo->type = ETH_MODULE_SFF_8079;
1664                modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
1665        }
1666        return 0;
1667}
1668
1669static int sfp_module_eeprom(struct sfp *sfp, struct ethtool_eeprom *ee,
1670                             u8 *data)
1671{
1672        unsigned int first, last, len;
1673        int ret;
1674
1675        if (ee->len == 0)
1676                return -EINVAL;
1677
1678        first = ee->offset;
1679        last = ee->offset + ee->len;
1680        if (first < ETH_MODULE_SFF_8079_LEN) {
1681                len = min_t(unsigned int, last, ETH_MODULE_SFF_8079_LEN);
1682                len -= first;
1683
1684                ret = sfp_read(sfp, false, first, data, len);
1685                if (ret < 0)
1686                        return ret;
1687
1688                first += len;
1689                data += len;
1690        }
1691        if (first < ETH_MODULE_SFF_8472_LEN && last > ETH_MODULE_SFF_8079_LEN) {
1692                len = min_t(unsigned int, last, ETH_MODULE_SFF_8472_LEN);
1693                len -= first;
1694                first -= ETH_MODULE_SFF_8079_LEN;
1695
1696                ret = sfp_read(sfp, true, first, data, len);
1697                if (ret < 0)
1698                        return ret;
1699        }
1700        return 0;
1701}
1702
1703static const struct sfp_socket_ops sfp_module_ops = {
1704        .attach = sfp_attach,
1705        .detach = sfp_detach,
1706        .start = sfp_start,
1707        .stop = sfp_stop,
1708        .module_info = sfp_module_info,
1709        .module_eeprom = sfp_module_eeprom,
1710};
1711
1712static void sfp_timeout(struct work_struct *work)
1713{
1714        struct sfp *sfp = container_of(work, struct sfp, timeout.work);
1715
1716        rtnl_lock();
1717        sfp_sm_event(sfp, SFP_E_TIMEOUT);
1718        rtnl_unlock();
1719}
1720
1721static void sfp_check_state(struct sfp *sfp)
1722{
1723        unsigned int state, i, changed;
1724
1725        mutex_lock(&sfp->st_mutex);
1726        state = sfp_get_state(sfp);
1727        changed = state ^ sfp->state;
1728        changed &= SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT;
1729
1730        for (i = 0; i < GPIO_MAX; i++)
1731                if (changed & BIT(i))
1732                        dev_dbg(sfp->dev, "%s %u -> %u\n", gpio_of_names[i],
1733                                !!(sfp->state & BIT(i)), !!(state & BIT(i)));
1734
1735        state |= sfp->state & (SFP_F_TX_DISABLE | SFP_F_RATE_SELECT);
1736        sfp->state = state;
1737
1738        rtnl_lock();
1739        if (changed & SFP_F_PRESENT)
1740                sfp_sm_event(sfp, state & SFP_F_PRESENT ?
1741                                SFP_E_INSERT : SFP_E_REMOVE);
1742
1743        if (changed & SFP_F_TX_FAULT)
1744                sfp_sm_event(sfp, state & SFP_F_TX_FAULT ?
1745                                SFP_E_TX_FAULT : SFP_E_TX_CLEAR);
1746
1747        if (changed & SFP_F_LOS)
1748                sfp_sm_event(sfp, state & SFP_F_LOS ?
1749                                SFP_E_LOS_HIGH : SFP_E_LOS_LOW);
1750        rtnl_unlock();
1751        mutex_unlock(&sfp->st_mutex);
1752}
1753
1754static irqreturn_t sfp_irq(int irq, void *data)
1755{
1756        struct sfp *sfp = data;
1757
1758        sfp_check_state(sfp);
1759
1760        return IRQ_HANDLED;
1761}
1762
1763static void sfp_poll(struct work_struct *work)
1764{
1765        struct sfp *sfp = container_of(work, struct sfp, poll.work);
1766
1767        sfp_check_state(sfp);
1768        mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
1769}
1770
1771static struct sfp *sfp_alloc(struct device *dev)
1772{
1773        struct sfp *sfp;
1774
1775        sfp = kzalloc(sizeof(*sfp), GFP_KERNEL);
1776        if (!sfp)
1777                return ERR_PTR(-ENOMEM);
1778
1779        sfp->dev = dev;
1780
1781        mutex_init(&sfp->sm_mutex);
1782        mutex_init(&sfp->st_mutex);
1783        INIT_DELAYED_WORK(&sfp->poll, sfp_poll);
1784        INIT_DELAYED_WORK(&sfp->timeout, sfp_timeout);
1785
1786        return sfp;
1787}
1788
1789static void sfp_cleanup(void *data)
1790{
1791        struct sfp *sfp = data;
1792
1793        cancel_delayed_work_sync(&sfp->poll);
1794        cancel_delayed_work_sync(&sfp->timeout);
1795        if (sfp->i2c_mii) {
1796                mdiobus_unregister(sfp->i2c_mii);
1797                mdiobus_free(sfp->i2c_mii);
1798        }
1799        if (sfp->i2c)
1800                i2c_put_adapter(sfp->i2c);
1801        kfree(sfp);
1802}
1803
1804static int sfp_probe(struct platform_device *pdev)
1805{
1806        const struct sff_data *sff;
1807        struct i2c_adapter *i2c;
1808        struct sfp *sfp;
1809        bool poll = false;
1810        int err, i;
1811
1812        sfp = sfp_alloc(&pdev->dev);
1813        if (IS_ERR(sfp))
1814                return PTR_ERR(sfp);
1815
1816        platform_set_drvdata(pdev, sfp);
1817
1818        err = devm_add_action(sfp->dev, sfp_cleanup, sfp);
1819        if (err < 0)
1820                return err;
1821
1822        sff = sfp->type = &sfp_data;
1823
1824        if (pdev->dev.of_node) {
1825                struct device_node *node = pdev->dev.of_node;
1826                const struct of_device_id *id;
1827                struct device_node *np;
1828
1829                id = of_match_node(sfp_of_match, node);
1830                if (WARN_ON(!id))
1831                        return -EINVAL;
1832
1833                sff = sfp->type = id->data;
1834
1835                np = of_parse_phandle(node, "i2c-bus", 0);
1836                if (!np) {
1837                        dev_err(sfp->dev, "missing 'i2c-bus' property\n");
1838                        return -ENODEV;
1839                }
1840
1841                i2c = of_find_i2c_adapter_by_node(np);
1842                of_node_put(np);
1843        } else if (has_acpi_companion(&pdev->dev)) {
1844                struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
1845                struct fwnode_handle *fw = acpi_fwnode_handle(adev);
1846                struct fwnode_reference_args args;
1847                struct acpi_handle *acpi_handle;
1848                int ret;
1849
1850                ret = acpi_node_get_property_reference(fw, "i2c-bus", 0, &args);
1851                if (ret || !is_acpi_device_node(args.fwnode)) {
1852                        dev_err(&pdev->dev, "missing 'i2c-bus' property\n");
1853                        return -ENODEV;
1854                }
1855
1856                acpi_handle = ACPI_HANDLE_FWNODE(args.fwnode);
1857                i2c = i2c_acpi_find_adapter_by_handle(acpi_handle);
1858        } else {
1859                return -EINVAL;
1860        }
1861
1862        if (!i2c)
1863                return -EPROBE_DEFER;
1864
1865        err = sfp_i2c_configure(sfp, i2c);
1866        if (err < 0) {
1867                i2c_put_adapter(i2c);
1868                return err;
1869        }
1870
1871        for (i = 0; i < GPIO_MAX; i++)
1872                if (sff->gpios & BIT(i)) {
1873                        sfp->gpio[i] = devm_gpiod_get_optional(sfp->dev,
1874                                           gpio_of_names[i], gpio_flags[i]);
1875                        if (IS_ERR(sfp->gpio[i]))
1876                                return PTR_ERR(sfp->gpio[i]);
1877                }
1878
1879        sfp->get_state = sfp_gpio_get_state;
1880        sfp->set_state = sfp_gpio_set_state;
1881
1882        /* Modules that have no detect signal are always present */
1883        if (!(sfp->gpio[GPIO_MODDEF0]))
1884                sfp->get_state = sff_gpio_get_state;
1885
1886        device_property_read_u32(&pdev->dev, "maximum-power-milliwatt",
1887                                 &sfp->max_power_mW);
1888        if (!sfp->max_power_mW)
1889                sfp->max_power_mW = 1000;
1890
1891        dev_info(sfp->dev, "Host maximum power %u.%uW\n",
1892                 sfp->max_power_mW / 1000, (sfp->max_power_mW / 100) % 10);
1893
1894        /* Get the initial state, and always signal TX disable,
1895         * since the network interface will not be up.
1896         */
1897        sfp->state = sfp_get_state(sfp) | SFP_F_TX_DISABLE;
1898
1899        if (sfp->gpio[GPIO_RATE_SELECT] &&
1900            gpiod_get_value_cansleep(sfp->gpio[GPIO_RATE_SELECT]))
1901                sfp->state |= SFP_F_RATE_SELECT;
1902        sfp_set_state(sfp, sfp->state);
1903        sfp_module_tx_disable(sfp);
1904
1905        for (i = 0; i < GPIO_MAX; i++) {
1906                if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
1907                        continue;
1908
1909                sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]);
1910                if (!sfp->gpio_irq[i]) {
1911                        poll = true;
1912                        continue;
1913                }
1914
1915                err = devm_request_threaded_irq(sfp->dev, sfp->gpio_irq[i],
1916                                                NULL, sfp_irq,
1917                                                IRQF_ONESHOT |
1918                                                IRQF_TRIGGER_RISING |
1919                                                IRQF_TRIGGER_FALLING,
1920                                                dev_name(sfp->dev), sfp);
1921                if (err) {
1922                        sfp->gpio_irq[i] = 0;
1923                        poll = true;
1924                }
1925        }
1926
1927        if (poll)
1928                mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
1929
1930        /* We could have an issue in cases no Tx disable pin is available or
1931         * wired as modules using a laser as their light source will continue to
1932         * be active when the fiber is removed. This could be a safety issue and
1933         * we should at least warn the user about that.
1934         */
1935        if (!sfp->gpio[GPIO_TX_DISABLE])
1936                dev_warn(sfp->dev,
1937                         "No tx_disable pin: SFP modules will always be emitting.\n");
1938
1939        sfp->sfp_bus = sfp_register_socket(sfp->dev, sfp, &sfp_module_ops);
1940        if (!sfp->sfp_bus)
1941                return -ENOMEM;
1942
1943        return 0;
1944}
1945
1946static int sfp_remove(struct platform_device *pdev)
1947{
1948        struct sfp *sfp = platform_get_drvdata(pdev);
1949
1950        sfp_unregister_socket(sfp->sfp_bus);
1951
1952        return 0;
1953}
1954
1955static void sfp_shutdown(struct platform_device *pdev)
1956{
1957        struct sfp *sfp = platform_get_drvdata(pdev);
1958        int i;
1959
1960        for (i = 0; i < GPIO_MAX; i++) {
1961                if (!sfp->gpio_irq[i])
1962                        continue;
1963
1964                devm_free_irq(sfp->dev, sfp->gpio_irq[i], sfp);
1965        }
1966
1967        cancel_delayed_work_sync(&sfp->poll);
1968        cancel_delayed_work_sync(&sfp->timeout);
1969}
1970
1971static struct platform_driver sfp_driver = {
1972        .probe = sfp_probe,
1973        .remove = sfp_remove,
1974        .shutdown = sfp_shutdown,
1975        .driver = {
1976                .name = "sfp",
1977                .of_match_table = sfp_of_match,
1978        },
1979};
1980
1981static int sfp_init(void)
1982{
1983        poll_jiffies = msecs_to_jiffies(100);
1984
1985        return platform_driver_register(&sfp_driver);
1986}
1987module_init(sfp_init);
1988
1989static void sfp_exit(void)
1990{
1991        platform_driver_unregister(&sfp_driver);
1992}
1993module_exit(sfp_exit);
1994
1995MODULE_ALIAS("platform:sfp");
1996MODULE_AUTHOR("Russell King");
1997MODULE_LICENSE("GPL v2");
1998