Symbol: mlxsw_i2c
drivers/net/ethernet/mellanox/mlxsw/i2c.c
115
mlxsw_i2c_convert_mbox(struct mlxsw_i2c *mlxsw_i2c, u8 *buf)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
121
mlxsw_i2c->cmd.mb_off_in = tmp &
drivers/net/ethernet/mellanox/mlxsw/i2c.c
123
mlxsw_i2c->cmd.mb_size_in = (tmp & GENMASK(31,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
128
mlxsw_i2c->cmd.mb_off_out = tmp &
drivers/net/ethernet/mellanox/mlxsw/i2c.c
130
mlxsw_i2c->cmd.mb_size_out = (tmp & GENMASK(31,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
153
struct mlxsw_i2c *mlxsw_i2c, u8 *p_status)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
197
struct mlxsw_i2c *mlxsw_i2c,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
244
struct mlxsw_i2c *mlxsw_i2c, u16 opcode, u32 in_mod)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
285
err = mlxsw_i2c_wait_go_bit(client, mlxsw_i2c, &status);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
303
struct mlxsw_i2c *mlxsw_i2c)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
323
mlxsw_i2c_convert_mbox(mlxsw_i2c, &buf[MLXSW_I2C_MBOX_OUT_PARAM_OFF]);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
334
struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
336
int off = mlxsw_i2c->cmd.mb_off_in, chunk_size, i, j;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
343
tran_buf = kmalloc(mlxsw_i2c->block_size + MLXSW_I2C_ADDR_BUF_SIZE,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
350
chunk_size = (in_mbox_size > mlxsw_i2c->block_size) ?
drivers/net/ethernet/mellanox/mlxsw/i2c.c
351
mlxsw_i2c->block_size : in_mbox_size;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
355
mlxsw_i2c->block_size * i, chunk_size);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
380
err = mlxsw_i2c_write_cmd(client, mlxsw_i2c, 0);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
388
err = mlxsw_i2c_wait_go_bit(client, mlxsw_i2c, p_status);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
412
struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
416
int off = mlxsw_i2c->cmd.mb_off_out;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
426
num = DIV_ROUND_UP(reg_size, mlxsw_i2c->block_size);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
428
if (mutex_lock_interruptible(&mlxsw_i2c->cmd.lock) < 0) {
drivers/net/ethernet/mellanox/mlxsw/i2c.c
439
mutex_unlock(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
445
num = DIV_ROUND_UP(reg_size, mlxsw_i2c->block_size);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
447
if (mutex_lock_interruptible(&mlxsw_i2c->cmd.lock) < 0) {
drivers/net/ethernet/mellanox/mlxsw/i2c.c
452
err = mlxsw_i2c_write_init_cmd(client, mlxsw_i2c, opcode,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
461
chunk_size = (reg_size > mlxsw_i2c->block_size) ?
drivers/net/ethernet/mellanox/mlxsw/i2c.c
462
mlxsw_i2c->block_size : reg_size;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
490
mutex_unlock(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
495
mutex_unlock(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
505
struct mlxsw_i2c *mlxsw_i2c = bus_priv;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
507
return mlxsw_i2c_cmd(mlxsw_i2c->dev, opcode, in_mod, in_mbox_size,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
528
struct mlxsw_i2c *mlxsw_i2c = bus_priv;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
532
mlxsw_i2c->core = mlxsw_core;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
542
mlxsw_i2c->bus_info.fw_rev.major =
drivers/net/ethernet/mellanox/mlxsw/i2c.c
544
mlxsw_i2c->bus_info.fw_rev.minor =
drivers/net/ethernet/mellanox/mlxsw/i2c.c
546
mlxsw_i2c->bus_info.fw_rev.subminor =
drivers/net/ethernet/mellanox/mlxsw/i2c.c
558
struct mlxsw_i2c *mlxsw_i2c = bus_priv;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
560
mlxsw_i2c->core = NULL;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
565
struct mlxsw_i2c *mlxsw_i2c;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
567
mlxsw_i2c = container_of(work, struct mlxsw_i2c, irq_work);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
568
mlxsw_core_irq_event_handlers_call(mlxsw_i2c->core);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
573
struct mlxsw_i2c *mlxsw_i2c = dev;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
575
mlxsw_core_schedule_work(&mlxsw_i2c->irq_work);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
583
static int mlxsw_i2c_irq_init(struct mlxsw_i2c *mlxsw_i2c, u8 addr)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
595
if (mlxsw_i2c->pdata && mlxsw_i2c->pdata->irq)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
596
mlxsw_i2c->irq = mlxsw_i2c->pdata->irq;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
598
mlxsw_i2c->irq = MLXSW_I2C_DEFAULT_IRQ;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
600
if (!mlxsw_i2c->irq)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
603
INIT_WORK(&mlxsw_i2c->irq_work, mlxsw_i2c_work_handler);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
604
err = request_irq(mlxsw_i2c->irq, mlxsw_i2c_irq_handler,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
606
mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
608
dev_err(mlxsw_i2c->bus_info.dev, "Failed to request irq: %d\n",
drivers/net/ethernet/mellanox/mlxsw/i2c.c
616
static void mlxsw_i2c_irq_fini(struct mlxsw_i2c *mlxsw_i2c)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
618
if (!IS_REACHABLE(CONFIG_MLXREG_HOTPLUG) || !mlxsw_i2c->irq)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
620
cancel_work_sync(&mlxsw_i2c->irq_work);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
621
free_irq(mlxsw_i2c->irq, mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
637
struct mlxsw_i2c *mlxsw_i2c;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
641
mlxsw_i2c = devm_kzalloc(&client->dev, sizeof(*mlxsw_i2c), GFP_KERNEL);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
642
if (!mlxsw_i2c)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
654
mlxsw_i2c->block_size = min_t(u16, MLXSW_I2C_BLK_MAX,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
658
mlxsw_i2c->block_size = MLXSW_I2C_BLK_DEF;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
661
i2c_set_clientdata(client, mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
662
mutex_init(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
677
err = mlxsw_i2c_write_cmd(client, mlxsw_i2c, 1);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
684
err = mlxsw_i2c_wait_go_bit(client, mlxsw_i2c, &status);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
699
err = mlxsw_i2c_get_mbox(client, mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
706
id->name, mlxsw_i2c->cmd.mb_size_in,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
707
mlxsw_i2c->cmd.mb_off_in, mlxsw_i2c->cmd.mb_size_out,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
708
mlxsw_i2c->cmd.mb_off_out);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
711
mlxsw_i2c->bus_info.device_kind = id->name;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
712
mlxsw_i2c->bus_info.device_name = client->name;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
713
mlxsw_i2c->bus_info.dev = &client->dev;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
714
mlxsw_i2c->bus_info.low_frequency = true;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
715
mlxsw_i2c->dev = &client->dev;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
716
mlxsw_i2c->pdata = client->dev.platform_data;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
718
err = mlxsw_i2c_irq_init(mlxsw_i2c, client->addr);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
722
err = mlxsw_core_bus_device_register(&mlxsw_i2c->bus_info,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
723
&mlxsw_i2c_bus, mlxsw_i2c, false,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
733
mlxsw_i2c_irq_fini(mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
735
mutex_destroy(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
743
struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
745
mlxsw_core_bus_device_unregister(mlxsw_i2c->core, false);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
746
mlxsw_i2c_irq_fini(mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
747
mutex_destroy(&mlxsw_i2c->cmd.lock);