Symbol: mlxsw_i2c
drivers/net/ethernet/mellanox/mlxsw/i2c.c
116
mlxsw_i2c_convert_mbox(struct mlxsw_i2c *mlxsw_i2c, u8 *buf)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
122
mlxsw_i2c->cmd.mb_off_in = tmp &
drivers/net/ethernet/mellanox/mlxsw/i2c.c
124
mlxsw_i2c->cmd.mb_size_in = (tmp & GENMASK(31,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
129
mlxsw_i2c->cmd.mb_off_out = tmp &
drivers/net/ethernet/mellanox/mlxsw/i2c.c
131
mlxsw_i2c->cmd.mb_size_out = (tmp & GENMASK(31,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
154
struct mlxsw_i2c *mlxsw_i2c, u8 *p_status)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
198
struct mlxsw_i2c *mlxsw_i2c,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
245
struct mlxsw_i2c *mlxsw_i2c, u16 opcode, u32 in_mod)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
286
err = mlxsw_i2c_wait_go_bit(client, mlxsw_i2c, &status);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
304
struct mlxsw_i2c *mlxsw_i2c)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
324
mlxsw_i2c_convert_mbox(mlxsw_i2c, &buf[MLXSW_I2C_MBOX_OUT_PARAM_OFF]);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
335
struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
337
int off = mlxsw_i2c->cmd.mb_off_in, chunk_size, i, j;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
344
tran_buf = kmalloc(mlxsw_i2c->block_size + MLXSW_I2C_ADDR_BUF_SIZE,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
351
chunk_size = (in_mbox_size > mlxsw_i2c->block_size) ?
drivers/net/ethernet/mellanox/mlxsw/i2c.c
352
mlxsw_i2c->block_size : in_mbox_size;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
356
mlxsw_i2c->block_size * i, chunk_size);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
381
err = mlxsw_i2c_write_cmd(client, mlxsw_i2c, 0);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
389
err = mlxsw_i2c_wait_go_bit(client, mlxsw_i2c, p_status);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
413
struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
417
int off = mlxsw_i2c->cmd.mb_off_out;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
427
num = DIV_ROUND_UP(reg_size, mlxsw_i2c->block_size);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
429
if (mutex_lock_interruptible(&mlxsw_i2c->cmd.lock) < 0) {
drivers/net/ethernet/mellanox/mlxsw/i2c.c
440
mutex_unlock(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
446
num = DIV_ROUND_UP(reg_size, mlxsw_i2c->block_size);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
448
if (mutex_lock_interruptible(&mlxsw_i2c->cmd.lock) < 0) {
drivers/net/ethernet/mellanox/mlxsw/i2c.c
453
err = mlxsw_i2c_write_init_cmd(client, mlxsw_i2c, opcode,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
462
chunk_size = (reg_size > mlxsw_i2c->block_size) ?
drivers/net/ethernet/mellanox/mlxsw/i2c.c
463
mlxsw_i2c->block_size : reg_size;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
491
mutex_unlock(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
496
mutex_unlock(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
506
struct mlxsw_i2c *mlxsw_i2c = bus_priv;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
508
return mlxsw_i2c_cmd(mlxsw_i2c->dev, opcode, in_mod, in_mbox_size,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
529
struct mlxsw_i2c *mlxsw_i2c = bus_priv;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
533
mlxsw_i2c->core = mlxsw_core;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
543
mlxsw_i2c->bus_info.fw_rev.major =
drivers/net/ethernet/mellanox/mlxsw/i2c.c
545
mlxsw_i2c->bus_info.fw_rev.minor =
drivers/net/ethernet/mellanox/mlxsw/i2c.c
547
mlxsw_i2c->bus_info.fw_rev.subminor =
drivers/net/ethernet/mellanox/mlxsw/i2c.c
559
struct mlxsw_i2c *mlxsw_i2c = bus_priv;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
561
mlxsw_i2c->core = NULL;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
566
struct mlxsw_i2c *mlxsw_i2c;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
568
mlxsw_i2c = container_of(work, struct mlxsw_i2c, irq_work);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
569
mlxsw_core_irq_event_handlers_call(mlxsw_i2c->core);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
574
struct mlxsw_i2c *mlxsw_i2c = dev;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
576
mlxsw_core_schedule_work(&mlxsw_i2c->irq_work);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
584
static int mlxsw_i2c_irq_init(struct mlxsw_i2c *mlxsw_i2c, u8 addr)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
596
if (mlxsw_i2c->pdata && mlxsw_i2c->pdata->irq)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
597
mlxsw_i2c->irq = mlxsw_i2c->pdata->irq;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
599
mlxsw_i2c->irq = MLXSW_I2C_DEFAULT_IRQ;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
601
if (!mlxsw_i2c->irq)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
604
INIT_WORK(&mlxsw_i2c->irq_work, mlxsw_i2c_work_handler);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
605
err = request_irq(mlxsw_i2c->irq, mlxsw_i2c_irq_handler,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
607
mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
609
dev_err(mlxsw_i2c->bus_info.dev, "Failed to request irq: %d\n",
drivers/net/ethernet/mellanox/mlxsw/i2c.c
617
static void mlxsw_i2c_irq_fini(struct mlxsw_i2c *mlxsw_i2c)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
619
if (!IS_REACHABLE(CONFIG_MLXREG_HOTPLUG) || !mlxsw_i2c->irq)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
621
cancel_work_sync(&mlxsw_i2c->irq_work);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
622
free_irq(mlxsw_i2c->irq, mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
638
struct mlxsw_i2c *mlxsw_i2c;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
642
mlxsw_i2c = devm_kzalloc(&client->dev, sizeof(*mlxsw_i2c), GFP_KERNEL);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
643
if (!mlxsw_i2c)
drivers/net/ethernet/mellanox/mlxsw/i2c.c
655
mlxsw_i2c->block_size = min_t(u16, MLXSW_I2C_BLK_MAX,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
659
mlxsw_i2c->block_size = MLXSW_I2C_BLK_DEF;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
662
i2c_set_clientdata(client, mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
663
mutex_init(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
678
err = mlxsw_i2c_write_cmd(client, mlxsw_i2c, 1);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
685
err = mlxsw_i2c_wait_go_bit(client, mlxsw_i2c, &status);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
700
err = mlxsw_i2c_get_mbox(client, mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
707
id->name, mlxsw_i2c->cmd.mb_size_in,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
708
mlxsw_i2c->cmd.mb_off_in, mlxsw_i2c->cmd.mb_size_out,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
709
mlxsw_i2c->cmd.mb_off_out);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
712
mlxsw_i2c->bus_info.device_kind = id->name;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
713
mlxsw_i2c->bus_info.device_name = client->name;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
714
mlxsw_i2c->bus_info.dev = &client->dev;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
715
mlxsw_i2c->bus_info.low_frequency = true;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
716
mlxsw_i2c->dev = &client->dev;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
717
mlxsw_i2c->pdata = client->dev.platform_data;
drivers/net/ethernet/mellanox/mlxsw/i2c.c
719
err = mlxsw_i2c_irq_init(mlxsw_i2c, client->addr);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
723
err = mlxsw_core_bus_device_register(&mlxsw_i2c->bus_info,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
724
&mlxsw_i2c_bus, mlxsw_i2c, false,
drivers/net/ethernet/mellanox/mlxsw/i2c.c
734
mlxsw_i2c_irq_fini(mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
736
mutex_destroy(&mlxsw_i2c->cmd.lock);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
744
struct mlxsw_i2c *mlxsw_i2c = i2c_get_clientdata(client);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
746
mlxsw_core_bus_device_unregister(mlxsw_i2c->core, false);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
747
mlxsw_i2c_irq_fini(mlxsw_i2c);
drivers/net/ethernet/mellanox/mlxsw/i2c.c
748
mutex_destroy(&mlxsw_i2c->cmd.lock);