Lines Matching refs:data
144 int (*init)(struct imx_usbmisc_data *data);
146 int (*post)(struct imx_usbmisc_data *data);
148 int (*set_wakeup)(struct imx_usbmisc_data *data, bool enabled);
150 int (*hsic_set_connect)(struct imx_usbmisc_data *data);
152 int (*hsic_set_clk)(struct imx_usbmisc_data *data, bool enabled);
154 int (*charger_detection)(struct imx_usbmisc_data *data);
156 int (*power_lost_check)(struct imx_usbmisc_data *data);
157 void (*vbus_comparator_on)(struct imx_usbmisc_data *data, bool on);
166 static inline bool is_imx53_usbmisc(struct imx_usbmisc_data *data);
168 static int usbmisc_imx25_init(struct imx_usbmisc_data *data)
170 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
174 if (data->index > 1)
178 switch (data->index) {
189 if (data->oc_pol_configured && data->oc_pol_active_low)
205 if (data->oc_pol_configured && data->oc_pol_active_low)
217 static int usbmisc_imx25_post(struct imx_usbmisc_data *data)
219 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
224 if (data->index > 2)
227 if (data->index)
234 if (data->evdo)
246 static int usbmisc_imx27_init(struct imx_usbmisc_data *data)
248 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
252 switch (data->index) {
267 if (data->disable_oc)
277 static int usbmisc_imx53_init(struct imx_usbmisc_data *data)
279 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
284 if (data->index > 3)
295 switch (data->index) {
297 if (data->disable_oc) {
304 if (data->disable_oc) {
311 if (data->ulpi) {
324 if (is_imx53_usbmisc(data)) {
334 if (data->disable_oc) {
341 if (data->ulpi) {
355 if (is_imx53_usbmisc(data)) {
364 if (data->disable_oc) {
377 static u32 usbmisc_wakeup_setting(struct imx_usbmisc_data *data)
381 if (data->ext_id || data->available_role != USB_DR_MODE_OTG)
384 if (data->ext_vbus || data->available_role == USB_DR_MODE_HOST)
391 (struct imx_usbmisc_data *data, bool enabled)
393 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
398 if (data->index > 3)
402 val = readl(usbmisc->base + data->index * 4);
405 val |= usbmisc_wakeup_setting(data);
408 pr_debug("wakeup int at ci_hdrc.%d\n", data->index);
411 writel(val, usbmisc->base + data->index * 4);
417 static int usbmisc_imx6q_init(struct imx_usbmisc_data *data)
419 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
423 if (data->index > 3)
428 reg = readl(usbmisc->base + data->index * 4);
429 if (data->disable_oc) {
438 if (data->oc_pol_configured && data->oc_pol_active_low)
440 else if (data->oc_pol_configured)
444 if (data->pwr_pol == 1)
446 writel(reg, usbmisc->base + data->index * 4);
449 reg = readl(usbmisc->base + data->index * 4);
451 usbmisc->base + data->index * 4);
454 if (data->hsic) {
455 reg = readl(usbmisc->base + data->index * 4);
457 usbmisc->base + data->index * 4);
459 + (data->index - 2) * 4);
462 + (data->index - 2) * 4);
467 usbmisc_imx6q_set_wakeup(data, false);
472 static int usbmisc_imx6_hsic_get_reg_offset(struct imx_usbmisc_data *data)
476 if (data->index == 2 || data->index == 3) {
477 offset = (data->index - 2) * 4;
478 } else if (data->index == 0) {
486 dev_err(data->dev, "index is error for usbmisc\n");
493 static int usbmisc_imx6_hsic_set_connect(struct imx_usbmisc_data *data)
497 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
501 offset = usbmisc_imx6_hsic_get_reg_offset(data);
517 static int usbmisc_imx6_hsic_set_clk(struct imx_usbmisc_data *data, bool on)
521 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
525 offset = usbmisc_imx6_hsic_get_reg_offset(data);
545 static int usbmisc_imx6sx_init(struct imx_usbmisc_data *data)
549 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
552 usbmisc_imx6q_init(data);
554 if (data->index == 0 || data->index == 1) {
555 reg = usbmisc->base + MX6_USB_OTG1_PHY_CTRL + data->index * 4;
564 val = readl(usbmisc->base + data->index * 4);
566 usbmisc->base + data->index * 4);
571 if (data->hsic) {
580 static int usbmisc_vf610_init(struct imx_usbmisc_data *data)
582 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
589 if (data->index >= 1)
592 if (data->disable_oc) {
601 (struct imx_usbmisc_data *data, bool enabled)
603 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
611 val |= usbmisc_wakeup_setting(data);
615 dev_dbg(data->dev, "wakeup int\n");
623 static int usbmisc_imx7d_init(struct imx_usbmisc_data *data)
625 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
629 if (data->index >= 1)
634 if (data->disable_oc) {
643 if (data->oc_pol_configured && data->oc_pol_active_low)
645 else if (data->oc_pol_configured)
649 if (data->pwr_pol == 1)
657 if (!data->hsic) {
665 if (data->emp_curr_control >= 0 &&
666 data->emp_curr_control <=
669 reg |= (data->emp_curr_control << TXPREEMPAMPTUNE0_BIT);
672 if (data->dc_vol_level_adjust >= 0 &&
673 data->dc_vol_level_adjust <=
676 reg |= (data->dc_vol_level_adjust << TXVREFTUNE0_BIT);
679 if (data->rise_fall_time_adjust >= 0 &&
680 data->rise_fall_time_adjust <=
683 reg |= (data->rise_fall_time_adjust << TXRISETUNE0_BIT);
691 usbmisc_imx7d_set_wakeup(data, false);
696 static int imx7d_charger_secondary_detection(struct imx_usbmisc_data *data)
698 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
699 struct usb_phy *usb_phy = data->usb_phy;
732 dev_dbg(data->dev, "It is a dedicate charging port\n");
735 dev_dbg(data->dev, "It is a charging downstream port\n");
742 static void imx7_disable_charger_detector(struct imx_usbmisc_data *data)
744 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
767 static int imx7d_charger_data_contact_detect(struct imx_usbmisc_data *data)
769 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
794 /* Disable DCD after finished data contact check */
802 dev_err(data->dev,
810 static int imx7d_charger_primary_detection(struct imx_usbmisc_data *data)
812 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
813 struct usb_phy *usb_phy = data->usb_phy;
832 dev_dbg(data->dev, "It is a standard downstream port\n");
847 static int imx7d_charger_detection(struct imx_usbmisc_data *data)
849 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
850 struct usb_phy *usb_phy = data->usb_phy;
858 dev_err(data->dev, "vbus is error\n");
877 ret = imx7d_charger_data_contact_detect(data);
881 ret = imx7d_charger_primary_detection(data);
883 ret = imx7d_charger_secondary_detection(data);
885 imx7_disable_charger_detector(data);
890 static void usbmisc_imx7d_vbus_comparator_on(struct imx_usbmisc_data *data,
894 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
897 if (data->hsic)
917 static int usbmisc_imx7ulp_init(struct imx_usbmisc_data *data)
919 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
923 if (data->index >= 1)
928 if (data->disable_oc) {
937 if (data->oc_pol_configured && data->oc_pol_active_low)
939 else if (data->oc_pol_configured)
943 if (data->pwr_pol == 1)
952 if (data->hsic) {
976 usbmisc_imx7d_set_wakeup(data, false);
981 static int usbmisc_imx7d_power_lost_check(struct imx_usbmisc_data *data)
983 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
1000 static int usbmisc_imx6sx_power_lost_check(struct imx_usbmisc_data *data)
1002 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
1007 val = readl(usbmisc->base + data->index * 4);
1071 static inline bool is_imx53_usbmisc(struct imx_usbmisc_data *data)
1073 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
1078 int imx_usbmisc_init(struct imx_usbmisc_data *data)
1082 if (!data)
1085 usbmisc = dev_get_drvdata(data->dev);
1088 return usbmisc->ops->init(data);
1092 int imx_usbmisc_init_post(struct imx_usbmisc_data *data)
1097 if (!data)
1100 usbmisc = dev_get_drvdata(data->dev);
1102 ret = usbmisc->ops->post(data);
1104 dev_err(data->dev, "post init failed, ret=%d\n", ret);
1109 ret = usbmisc->ops->set_wakeup(data, false);
1111 dev_err(data->dev, "set_wakeup failed, ret=%d\n", ret);
1119 int imx_usbmisc_hsic_set_connect(struct imx_usbmisc_data *data)
1123 if (!data)
1126 usbmisc = dev_get_drvdata(data->dev);
1127 if (!usbmisc->ops->hsic_set_connect || !data->hsic)
1129 return usbmisc->ops->hsic_set_connect(data);
1133 int imx_usbmisc_charger_detection(struct imx_usbmisc_data *data, bool connect)
1139 if (!data)
1142 usbmisc = dev_get_drvdata(data->dev);
1143 usb_phy = data->usb_phy;
1148 ret = usbmisc->ops->charger_detection(data);
1150 dev_err(data->dev,
1165 int imx_usbmisc_suspend(struct imx_usbmisc_data *data, bool wakeup)
1170 if (!data)
1173 usbmisc = dev_get_drvdata(data->dev);
1176 usbmisc->ops->vbus_comparator_on(data, false);
1179 ret = usbmisc->ops->set_wakeup(data, true);
1181 dev_err(data->dev, "set_wakeup failed, ret=%d\n", ret);
1185 if (usbmisc->ops->hsic_set_clk && data->hsic)
1186 ret = usbmisc->ops->hsic_set_clk(data, false);
1188 dev_err(data->dev, "set_wakeup failed, ret=%d\n", ret);
1196 int imx_usbmisc_resume(struct imx_usbmisc_data *data, bool wakeup)
1201 if (!data)
1204 usbmisc = dev_get_drvdata(data->dev);
1207 ret = usbmisc->ops->power_lost_check(data);
1210 ret = imx_usbmisc_init(data);
1212 dev_err(data->dev, "re-init failed, ret=%d\n", ret);
1218 ret = usbmisc->ops->set_wakeup(data, false);
1220 dev_err(data->dev, "set_wakeup failed, ret=%d\n", ret);
1224 if (usbmisc->ops->hsic_set_clk && data->hsic)
1225 ret = usbmisc->ops->hsic_set_clk(data, true);
1227 dev_err(data->dev, "set_wakeup failed, ret=%d\n", ret);
1232 usbmisc->ops->vbus_comparator_on(data, true);
1238 usbmisc->ops->set_wakeup(data, true);
1246 .data = &imx25_usbmisc_ops,
1250 .data = &imx25_usbmisc_ops,
1254 .data = &imx27_usbmisc_ops,
1258 .data = &imx51_usbmisc_ops,
1262 .data = &imx53_usbmisc_ops,
1266 .data = &imx6q_usbmisc_ops,
1270 .data = &vf610_usbmisc_ops,
1274 .data = &imx6sx_usbmisc_ops,
1278 .data = &imx6sx_usbmisc_ops,
1282 .data = &imx7d_usbmisc_ops,
1286 .data = &imx7ulp_usbmisc_ops,
1294 struct imx_usbmisc *data;
1296 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
1297 if (!data)
1300 spin_lock_init(&data->lock);
1302 data->base = devm_platform_ioremap_resource(pdev, 0);
1303 if (IS_ERR(data->base))
1304 return PTR_ERR(data->base);
1306 data->ops = of_device_get_match_data(&pdev->dev);
1307 platform_set_drvdata(pdev, data);