@@ -130,6 +130,8 @@ struct qcom_snps_eusb2_hsphy {
130
130
struct regulator_bulk_data vregs [EUSB2_NUM_VREGS ];
131
131
132
132
enum phy_mode mode ;
133
+
134
+ struct phy * repeater ;
133
135
};
134
136
135
137
static int qcom_snps_eusb2_hsphy_set_mode (struct phy * p , enum phy_mode mode , int submode )
@@ -138,7 +140,7 @@ static int qcom_snps_eusb2_hsphy_set_mode(struct phy *p, enum phy_mode mode, int
138
140
139
141
phy -> mode = mode ;
140
142
141
- return 0 ;
143
+ return phy_set_mode_ext ( phy -> repeater , mode , submode ) ;
142
144
}
143
145
144
146
static void qcom_snps_eusb2_hsphy_write_mask (void __iomem * base , u32 offset ,
@@ -236,6 +238,12 @@ static int qcom_snps_eusb2_hsphy_init(struct phy *p)
236
238
if (ret )
237
239
return ret ;
238
240
241
+ ret = phy_init (phy -> repeater );
242
+ if (ret ) {
243
+ dev_err (& p -> dev , "repeater init failed. %d\n" , ret );
244
+ goto disable_vreg ;
245
+ }
246
+
239
247
ret = clk_prepare_enable (phy -> ref_clk );
240
248
if (ret ) {
241
249
dev_err (& p -> dev , "failed to enable ref clock, %d\n" , ret );
@@ -343,6 +351,8 @@ static int qcom_snps_eusb2_hsphy_exit(struct phy *p)
343
351
344
352
regulator_bulk_disable (ARRAY_SIZE (phy -> vregs ), phy -> vregs );
345
353
354
+ phy_exit (phy -> repeater );
355
+
346
356
return 0 ;
347
357
}
348
358
@@ -356,6 +366,7 @@ static const struct phy_ops qcom_snps_eusb2_hsphy_ops = {
356
366
static int qcom_snps_eusb2_hsphy_probe (struct platform_device * pdev )
357
367
{
358
368
struct device * dev = & pdev -> dev ;
369
+ struct device_node * np = dev -> of_node ;
359
370
struct qcom_snps_eusb2_hsphy * phy ;
360
371
struct phy_provider * phy_provider ;
361
372
struct phy * generic_phy ;
@@ -387,6 +398,12 @@ static int qcom_snps_eusb2_hsphy_probe(struct platform_device *pdev)
387
398
if (ret )
388
399
return dev_err_probe (dev , ret ,
389
400
"failed to get regulator supplies\n" );
401
+
402
+ phy -> repeater = devm_of_phy_get_by_index (dev , np , 0 );
403
+ if (IS_ERR (phy -> repeater ))
404
+ return dev_err_probe (dev , PTR_ERR (phy -> repeater ),
405
+ "failed to get repeater\n" );
406
+
390
407
generic_phy = devm_phy_create (dev , NULL , & qcom_snps_eusb2_hsphy_ops );
391
408
if (IS_ERR (generic_phy )) {
392
409
dev_err (dev , "failed to create phy %d\n" , ret );
0 commit comments