Symbol: miic
drivers/net/pcs/pcs-rzn1-miic.c
248
void (*miic_write)(struct miic *miic, int offset, u32 value);
drivers/net/pcs/pcs-rzn1-miic.c
260
struct miic *miic;
drivers/net/pcs/pcs-rzn1-miic.c
271
static void miic_unlock_regs(struct miic *miic)
drivers/net/pcs/pcs-rzn1-miic.c
274
writel(0x00A5, miic->base + MIIC_PRCMD);
drivers/net/pcs/pcs-rzn1-miic.c
275
writel(0x0001, miic->base + MIIC_PRCMD);
drivers/net/pcs/pcs-rzn1-miic.c
276
writel(0xFFFE, miic->base + MIIC_PRCMD);
drivers/net/pcs/pcs-rzn1-miic.c
277
writel(0x0001, miic->base + MIIC_PRCMD);
drivers/net/pcs/pcs-rzn1-miic.c
280
static void miic_lock_regs(struct miic *miic)
drivers/net/pcs/pcs-rzn1-miic.c
283
writel(0x0000, miic->base + MIIC_PRCMD);
drivers/net/pcs/pcs-rzn1-miic.c
286
static void miic_reg_writel_unlocked(struct miic *miic, int offset, u32 value)
drivers/net/pcs/pcs-rzn1-miic.c
288
writel(value, miic->base + offset);
drivers/net/pcs/pcs-rzn1-miic.c
291
static void miic_reg_writel_locked(struct miic *miic, int offset, u32 value)
drivers/net/pcs/pcs-rzn1-miic.c
293
miic_unlock_regs(miic);
drivers/net/pcs/pcs-rzn1-miic.c
294
writel(value, miic->base + offset);
drivers/net/pcs/pcs-rzn1-miic.c
295
miic_lock_regs(miic);
drivers/net/pcs/pcs-rzn1-miic.c
298
static void miic_reg_writel(struct miic *miic, int offset, u32 value)
drivers/net/pcs/pcs-rzn1-miic.c
300
miic->of_data->miic_write(miic, offset, value);
drivers/net/pcs/pcs-rzn1-miic.c
303
static u32 miic_reg_readl(struct miic *miic, int offset)
drivers/net/pcs/pcs-rzn1-miic.c
305
return readl(miic->base + offset);
drivers/net/pcs/pcs-rzn1-miic.c
308
static void miic_reg_rmw(struct miic *miic, int offset, u32 mask, u32 val)
drivers/net/pcs/pcs-rzn1-miic.c
312
spin_lock(&miic->lock);
drivers/net/pcs/pcs-rzn1-miic.c
314
reg = miic_reg_readl(miic, offset);
drivers/net/pcs/pcs-rzn1-miic.c
317
miic_reg_writel(miic, offset, reg);
drivers/net/pcs/pcs-rzn1-miic.c
319
spin_unlock(&miic->lock);
drivers/net/pcs/pcs-rzn1-miic.c
322
static void miic_converter_enable(struct miic *miic, int port, int enable)
drivers/net/pcs/pcs-rzn1-miic.c
329
miic_reg_rmw(miic, MIIC_CONVRST, MIIC_CONVRST_PHYIF_RST(port), val);
drivers/net/pcs/pcs-rzn1-miic.c
337
struct miic *miic = miic_port->miic;
drivers/net/pcs/pcs-rzn1-miic.c
377
miic_reg_rmw(miic, MIIC_CONVCTRL(port), mask, val);
drivers/net/pcs/pcs-rzn1-miic.c
378
miic_converter_enable(miic, miic_port->port, 1);
drivers/net/pcs/pcs-rzn1-miic.c
387
struct miic *miic = miic_port->miic;
drivers/net/pcs/pcs-rzn1-miic.c
413
miic_reg_rmw(miic, MIIC_CONVCTRL(port),
drivers/net/pcs/pcs-rzn1-miic.c
420
struct miic *miic = miic_port->miic;
drivers/net/pcs/pcs-rzn1-miic.c
436
miic_reg_rmw(miic, MIIC_CONVCTRL(miic_port->port), mask, val);
drivers/net/pcs/pcs-rzn1-miic.c
438
miic_converter_enable(miic, miic_port->port, 1);
drivers/net/pcs/pcs-rzn1-miic.c
456
struct miic *miic;
drivers/net/pcs/pcs-rzn1-miic.c
483
miic = platform_get_drvdata(pdev);
drivers/net/pcs/pcs-rzn1-miic.c
484
of_data = miic->of_data;
drivers/net/pcs/pcs-rzn1-miic.c
496
device_link_add(dev, miic->dev, DL_FLAG_AUTOREMOVE_CONSUMER);
drivers/net/pcs/pcs-rzn1-miic.c
499
miic_port->miic = miic;
drivers/net/pcs/pcs-rzn1-miic.c
515
miic_converter_enable(miic_port->miic, miic_port->port, 0);
drivers/net/pcs/pcs-rzn1-miic.c
520
static int miic_init_hw(struct miic *miic, u32 cfg_mode)
drivers/net/pcs/pcs-rzn1-miic.c
522
u8 sw_mode_mask = miic->of_data->sw_mode_mask;
drivers/net/pcs/pcs-rzn1-miic.c
529
if (miic->of_data->init_unlock_lock_regs)
drivers/net/pcs/pcs-rzn1-miic.c
530
miic_unlock_regs(miic);
drivers/net/pcs/pcs-rzn1-miic.c
535
miic_reg_writel(miic, MIIC_MODCTRL,
drivers/net/pcs/pcs-rzn1-miic.c
538
for (port = 0; port < miic->of_data->miic_port_max; port++) {
drivers/net/pcs/pcs-rzn1-miic.c
539
miic_converter_enable(miic, port, 0);
drivers/net/pcs/pcs-rzn1-miic.c
544
miic_reg_writel(miic, MIIC_SWCTRL, 0x0);
drivers/net/pcs/pcs-rzn1-miic.c
545
miic_reg_writel(miic, MIIC_SWDUPC, 0x0);
drivers/net/pcs/pcs-rzn1-miic.c
566
static void miic_dump_conf(struct miic *miic, s8 *conf)
drivers/net/pcs/pcs-rzn1-miic.c
568
const struct miic_of_data *of_data = miic->of_data;
drivers/net/pcs/pcs-rzn1-miic.c
578
dev_err(miic->dev, "%s: %s\n",
drivers/net/pcs/pcs-rzn1-miic.c
583
static int miic_match_dt_conf(struct miic *miic, s8 *dt_val, u32 *mode_cfg)
drivers/net/pcs/pcs-rzn1-miic.c
585
const struct miic_of_data *of_data = miic->of_data;
drivers/net/pcs/pcs-rzn1-miic.c
593
miic->of_data->conf_conv_count)) {
drivers/net/pcs/pcs-rzn1-miic.c
599
dev_err(miic->dev, "Failed to apply requested configuration\n");
drivers/net/pcs/pcs-rzn1-miic.c
600
miic_dump_conf(miic, dt_val);
drivers/net/pcs/pcs-rzn1-miic.c
605
static void miic_configure_phy_link(struct miic *miic, u32 conf,
drivers/net/pcs/pcs-rzn1-miic.c
612
if (miic->of_data->type == MIIC_TYPE_RZN1) {
drivers/net/pcs/pcs-rzn1-miic.c
666
miic->link_cfg.mask |= mask;
drivers/net/pcs/pcs-rzn1-miic.c
668
miic->link_cfg.val |= mask;
drivers/net/pcs/pcs-rzn1-miic.c
670
miic->link_cfg.val &= ~mask;
drivers/net/pcs/pcs-rzn1-miic.c
673
static int miic_parse_dt(struct miic *miic, u32 *mode_cfg)
drivers/net/pcs/pcs-rzn1-miic.c
675
struct device_node *np = miic->dev->of_node;
drivers/net/pcs/pcs-rzn1-miic.c
682
dt_val = kmalloc_objs(*dt_val, miic->of_data->conf_conv_count);
drivers/net/pcs/pcs-rzn1-miic.c
699
dt_val[port + !miic->of_data->miic_port_start] = conf;
drivers/net/pcs/pcs-rzn1-miic.c
703
miic_configure_phy_link(miic, conf, port, active_low);
drivers/net/pcs/pcs-rzn1-miic.c
706
ret = miic_match_dt_conf(miic, dt_val, mode_cfg);
drivers/net/pcs/pcs-rzn1-miic.c
714
struct miic *miic = data;
drivers/net/pcs/pcs-rzn1-miic.c
717
ret = reset_control_bulk_assert(miic->of_data->reset_count, miic->rsts);
drivers/net/pcs/pcs-rzn1-miic.c
719
dev_err(miic->dev, "failed to assert reset lines\n");
drivers/net/pcs/pcs-rzn1-miic.c
722
static int miic_reset_control_init(struct miic *miic)
drivers/net/pcs/pcs-rzn1-miic.c
724
const struct miic_of_data *of_data = miic->of_data;
drivers/net/pcs/pcs-rzn1-miic.c
725
struct device *dev = miic->dev;
drivers/net/pcs/pcs-rzn1-miic.c
733
miic->rsts[i].id = of_data->reset_ids[i];
drivers/net/pcs/pcs-rzn1-miic.c
736
miic->rsts);
drivers/net/pcs/pcs-rzn1-miic.c
741
ret = reset_control_bulk_deassert(of_data->reset_count, miic->rsts);
drivers/net/pcs/pcs-rzn1-miic.c
747
miic);
drivers/net/pcs/pcs-rzn1-miic.c
757
struct miic *miic;
drivers/net/pcs/pcs-rzn1-miic.c
761
miic = devm_kzalloc(dev, sizeof(*miic), GFP_KERNEL);
drivers/net/pcs/pcs-rzn1-miic.c
762
if (!miic)
drivers/net/pcs/pcs-rzn1-miic.c
765
miic->of_data = of_device_get_match_data(dev);
drivers/net/pcs/pcs-rzn1-miic.c
766
miic->dev = dev;
drivers/net/pcs/pcs-rzn1-miic.c
768
ret = miic_parse_dt(miic, &mode_cfg);
drivers/net/pcs/pcs-rzn1-miic.c
772
spin_lock_init(&miic->lock);
drivers/net/pcs/pcs-rzn1-miic.c
773
miic->base = devm_platform_ioremap_resource(pdev, 0);
drivers/net/pcs/pcs-rzn1-miic.c
774
if (IS_ERR(miic->base))
drivers/net/pcs/pcs-rzn1-miic.c
775
return PTR_ERR(miic->base);
drivers/net/pcs/pcs-rzn1-miic.c
777
ret = miic_reset_control_init(miic);
drivers/net/pcs/pcs-rzn1-miic.c
789
ret = miic_init_hw(miic, mode_cfg);
drivers/net/pcs/pcs-rzn1-miic.c
793
miic_reg_rmw(miic, MIIC_PHY_LINK, miic->link_cfg.mask, miic->link_cfg.val);
drivers/net/pcs/pcs-rzn1-miic.c
800
platform_set_drvdata(pdev, miic);