Skip to content

Commit 4b7aa47

Browse files
prabhakarladvinodkoul
authored andcommitted
phy: renesas: rcar-gen3-usb2: Allow SoC-specific OBINT bits via phy_data
Update the PHY driver to support SoC-specific OBINT enable bits by introducing the `obint_enable_bits` field in the `rcar_gen3_phy_drv_data` structure. This allows each SoC to specify bits required. Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Link: https://lore.kernel.org/r/20250808215209.3692744-4-prabhakar.mahadev-lad.rj@bp.renesas.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent f75806d commit 4b7aa47

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

drivers/phy/renesas/phy-rcar-gen3-usb2.c

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@
7171
/* OBINTSTA and OBINTEN */
7272
#define USB2_OBINT_SESSVLDCHG BIT(12)
7373
#define USB2_OBINT_IDDIGCHG BIT(11)
74-
#define USB2_OBINT_BITS (USB2_OBINT_SESSVLDCHG | \
75-
USB2_OBINT_IDDIGCHG)
74+
#define USB2_OBINT_IDCHG_EN BIT(0) /* RZ/G2L specific */
7675

7776
/* VBCTRL */
7877
#define USB2_VBCTRL_OCCLREN BIT(16)
@@ -93,7 +92,6 @@
9392
#define USB2_ADPCTRL_DRVVBUS BIT(4)
9493

9594
/* RZ/G2L specific */
96-
#define USB2_OBINT_IDCHG_EN BIT(0)
9795
#define USB2_LINECTRL1_USB2_IDMON BIT(0)
9896

9997
#define NUM_OF_PHYS 4
@@ -130,7 +128,6 @@ struct rcar_gen3_chan {
130128
struct work_struct work;
131129
spinlock_t lock; /* protects access to hardware and driver data structure. */
132130
enum usb_dr_mode dr_mode;
133-
u32 obint_enable_bits;
134131
bool extcon_host;
135132
bool is_otg_channel;
136133
bool uses_otg_pins;
@@ -141,6 +138,7 @@ struct rcar_gen3_phy_drv_data {
141138
bool no_adp_ctrl;
142139
bool init_bus;
143140
bool utmi_ctrl;
141+
u32 obint_enable_bits;
144142
};
145143

146144
/*
@@ -225,9 +223,9 @@ static void rcar_gen3_control_otg_irq(struct rcar_gen3_chan *ch, int enable)
225223
u32 val = readl(usb2_base + USB2_OBINTEN);
226224

227225
if (ch->uses_otg_pins && enable)
228-
val |= ch->obint_enable_bits;
226+
val |= ch->phy_data->obint_enable_bits;
229227
else
230-
val &= ~ch->obint_enable_bits;
228+
val &= ~ch->phy_data->obint_enable_bits;
231229
writel(val, usb2_base + USB2_OBINTEN);
232230
}
233231

@@ -430,7 +428,7 @@ static void rcar_gen3_init_otg(struct rcar_gen3_chan *ch)
430428
mdelay(20);
431429

432430
writel(0xffffffff, usb2_base + USB2_OBINTSTA);
433-
writel(ch->obint_enable_bits, usb2_base + USB2_OBINTEN);
431+
writel(ch->phy_data->obint_enable_bits, usb2_base + USB2_OBINTEN);
434432

435433
rcar_gen3_device_recognition(ch);
436434
}
@@ -450,9 +448,9 @@ static irqreturn_t rcar_gen3_phy_usb2_irq(int irq, void *_ch)
450448

451449
scoped_guard(spinlock, &ch->lock) {
452450
status = readl(usb2_base + USB2_OBINTSTA);
453-
if (status & ch->obint_enable_bits) {
451+
if (status & ch->phy_data->obint_enable_bits) {
454452
dev_vdbg(dev, "%s: %08x\n", __func__, status);
455-
writel(ch->obint_enable_bits, usb2_base + USB2_OBINTSTA);
453+
writel(ch->phy_data->obint_enable_bits, usb2_base + USB2_OBINTSTA);
456454
rcar_gen3_device_recognition(ch);
457455
ret = IRQ_HANDLED;
458456
}
@@ -591,28 +589,35 @@ static const struct phy_ops rz_g1c_phy_usb2_ops = {
591589
static const struct rcar_gen3_phy_drv_data rcar_gen3_phy_usb2_data = {
592590
.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
593591
.no_adp_ctrl = false,
592+
.obint_enable_bits = USB2_OBINT_SESSVLDCHG |
593+
USB2_OBINT_IDDIGCHG,
594594
};
595595

596596
static const struct rcar_gen3_phy_drv_data rz_g1c_phy_usb2_data = {
597597
.phy_usb2_ops = &rz_g1c_phy_usb2_ops,
598598
.no_adp_ctrl = false,
599+
.obint_enable_bits = USB2_OBINT_SESSVLDCHG |
600+
USB2_OBINT_IDDIGCHG,
599601
};
600602

601603
static const struct rcar_gen3_phy_drv_data rz_g2l_phy_usb2_data = {
602604
.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
603605
.no_adp_ctrl = true,
606+
.obint_enable_bits = USB2_OBINT_IDCHG_EN,
604607
};
605608

606609
static const struct rcar_gen3_phy_drv_data rz_g3s_phy_usb2_data = {
607610
.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
608611
.no_adp_ctrl = true,
609612
.init_bus = true,
613+
.obint_enable_bits = USB2_OBINT_IDCHG_EN,
610614
};
611615

612616
static const struct rcar_gen3_phy_drv_data rz_v2h_phy_usb2_data = {
613617
.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
614618
.no_adp_ctrl = true,
615619
.utmi_ctrl = true,
620+
.obint_enable_bits = USB2_OBINT_IDCHG_EN,
616621
};
617622

618623
static const struct of_device_id rcar_gen3_phy_usb2_match_table[] = {
@@ -747,7 +752,6 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
747752
if (IS_ERR(channel->base))
748753
return PTR_ERR(channel->base);
749754

750-
channel->obint_enable_bits = USB2_OBINT_BITS;
751755
channel->dr_mode = rcar_gen3_get_dr_mode(dev->of_node);
752756
if (channel->dr_mode != USB_DR_MODE_UNKNOWN) {
753757
channel->is_otg_channel = true;
@@ -786,9 +790,6 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
786790
goto error;
787791
}
788792

789-
if (channel->phy_data->no_adp_ctrl)
790-
channel->obint_enable_bits = USB2_OBINT_IDCHG_EN;
791-
792793
spin_lock_init(&channel->lock);
793794
for (i = 0; i < NUM_OF_PHYS; i++) {
794795
channel->rphys[i].phy = devm_phy_create(dev, NULL,

0 commit comments

Comments
 (0)