Lines Matching +full:usb +full:- +full:detect
1 // SPDX-License-Identifier: GPL-2.0+
3 // extcon-max77693.c - MAX77693 extcon driver to support MAX77693 MUIC
17 #include <linux/mfd/max77693-common.h>
18 #include <linux/mfd/max77693-private.h>
19 #include <linux/extcon-provider.h>
23 #define DEV_NAME "max77693-muic"
29 * extcon-max77693 driver use 'default_init_data' to bring up base operation
34 /* STATUS2 - [3]ChgDetRun */
38 /* INTMASK1 - Unmask [3]ADC1KM,[0]ADCM */
43 /* INTMASK2 - Unmask [0]ChgTypM */
47 /* INTMASK3 - Mask all of interrupts */
80 * Use delayed workqueue to detect cable state and then
91 * Default usb/uart path whether UART/USB or AUX_UART/AUX_USB
128 { MAX77693_MUIC_IRQ_INT1_ADC, "muic-ADC" },
129 { MAX77693_MUIC_IRQ_INT1_ADC_LOW, "muic-ADCLOW" },
130 { MAX77693_MUIC_IRQ_INT1_ADC_ERR, "muic-ADCError" },
131 { MAX77693_MUIC_IRQ_INT1_ADC1K, "muic-ADC1K" },
132 { MAX77693_MUIC_IRQ_INT2_CHGTYP, "muic-CHGTYP" },
133 { MAX77693_MUIC_IRQ_INT2_CHGDETREUN, "muic-CHGDETREUN" },
134 { MAX77693_MUIC_IRQ_INT2_DCDTMR, "muic-DCDTMR" },
135 { MAX77693_MUIC_IRQ_INT2_DXOVP, "muic-DXOVP" },
136 { MAX77693_MUIC_IRQ_INT2_VBVOLT, "muic-VBVOLT" },
137 { MAX77693_MUIC_IRQ_INT2_VIDRM, "muic-VIDRM" },
138 { MAX77693_MUIC_IRQ_INT3_EOC, "muic-EOC" },
139 { MAX77693_MUIC_IRQ_INT3_CGMBC, "muic-CGMBC" },
140 { MAX77693_MUIC_IRQ_INT3_OVP, "muic-OVP" },
141 { MAX77693_MUIC_IRQ_INT3_MBCCHG_ERR, "muic-MBCCHG_ERR" },
142 { MAX77693_MUIC_IRQ_INT3_CHG_ENABLED, "muic-CHG_ENABLED" },
143 { MAX77693_MUIC_IRQ_INT3_BAT_DET, "muic-BAT_DET" },
211 * max77693_muic_set_debounce_time - Set the debounce time of ADC
230 ret = regmap_write(info->max77693->regmap_muic, in max77693_muic_set_debounce_time()
234 dev_err(info->dev, "failed to set ADC debounce time\n"); in max77693_muic_set_debounce_time()
239 dev_err(info->dev, "invalid ADC debounce time\n"); in max77693_muic_set_debounce_time()
240 return -EINVAL; in max77693_muic_set_debounce_time()
247 * max77693_muic_set_path - Set hardware line according to attached cable
267 ret = regmap_update_bits(info->max77693->regmap_muic, in max77693_muic_set_path()
270 dev_err(info->dev, "failed to update MUIC register\n"); in max77693_muic_set_path()
279 ret = regmap_update_bits(info->max77693->regmap_muic, in max77693_muic_set_path()
284 dev_err(info->dev, "failed to update MUIC register\n"); in max77693_muic_set_path()
288 dev_info(info->dev, in max77693_muic_set_path()
296 * max77693_muic_get_cable_type - Return cable type and check cable state
303 * - MAX77693_CABLE_GROUP_ADC
304 * - MAX77693_CABLE_GROUP_ADC_GND
305 * - MAX77693_CABLE_GROUP_CHG
306 * - MAX77693_CABLE_GROUP_VBVOLT
324 adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; in max77693_muic_get_cable_type()
329 * (info->prev_cable_type) for handling cable when cable is in max77693_muic_get_cable_type()
335 cable_type = info->prev_cable_type; in max77693_muic_get_cable_type()
336 info->prev_cable_type = MAX77693_MUIC_ADC_OPEN; in max77693_muic_get_cable_type()
340 cable_type = info->prev_cable_type = adc; in max77693_muic_get_cable_type()
348 adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; in max77693_muic_get_cable_type()
353 * (info->prev_cable_type/_gnd) for handling cable when cable in max77693_muic_get_cable_type()
359 cable_type = info->prev_cable_type_gnd; in max77693_muic_get_cable_type()
360 info->prev_cable_type_gnd = MAX77693_MUIC_ADC_OPEN; in max77693_muic_get_cable_type()
364 adclow = info->status[0] & MAX77693_STATUS1_ADCLOW_MASK; in max77693_muic_get_cable_type()
366 adc1k = info->status[0] & MAX77693_STATUS1_ADC1K_MASK; in max77693_muic_get_cable_type()
369 vbvolt = info->status[1] & MAX77693_STATUS2_VBVOLT_MASK; in max77693_muic_get_cable_type()
385 info->prev_cable_type = adc; in max77693_muic_get_cable_type()
386 info->prev_cable_type_gnd = cable_type; in max77693_muic_get_cable_type()
395 chg_type = info->status[1] & MAX77693_STATUS2_CHGTYP_MASK; in max77693_muic_get_cable_type()
401 cable_type = info->prev_chg_type; in max77693_muic_get_cable_type()
402 info->prev_chg_type = MAX77693_CHARGER_TYPE_NONE; in max77693_muic_get_cable_type()
408 * type(info->prev_chg_type) for handling cable when in max77693_muic_get_cable_type()
411 cable_type = info->prev_chg_type = chg_type; in max77693_muic_get_cable_type()
420 adc = info->status[0] & MAX77693_STATUS1_ADC_MASK; in max77693_muic_get_cable_type()
422 chg_type = info->status[1] & MAX77693_STATUS2_CHGTYP_MASK; in max77693_muic_get_cable_type()
435 vbvolt = info->status[1] & MAX77693_STATUS2_VBVOLT_MASK; in max77693_muic_get_cable_type()
441 dev_err(info->dev, "Unknown cable group (%d)\n", group); in max77693_muic_get_cable_type()
442 cable_type = -EINVAL; in max77693_muic_get_cable_type()
457 dev_info(info->dev, in max77693_muic_dock_handler()
462 case MAX77693_MUIC_ADC_RESERVED_ACC_3: /* Dock-Smart */ in max77693_muic_dock_handler()
465 * The Dock-Smart device need surely external power supply. in max77693_muic_dock_handler()
466 * If power cable(USB/TA) isn't connected to Dock device, in max77693_muic_dock_handler()
467 * user can't use Dock-Smart for desktop mode. in max77693_muic_dock_handler()
472 dev_warn(info->dev, in max77693_muic_dock_handler()
473 "Cannot detect external power supply\n"); in max77693_muic_dock_handler()
479 * - Dock device include three type of cable which in max77693_muic_dock_handler()
480 * are HDMI, USB for mouse/keyboard and micro-usb port in max77693_muic_dock_handler()
481 * for USB/TA cable. Dock device need always exteranl in max77693_muic_dock_handler()
482 * power supply(USB/TA cable through micro-usb cable). Dock in max77693_muic_dock_handler()
486 * Features of 'USB/TA cable with Dock device' in max77693_muic_dock_handler()
487 * - Support MHL in max77693_muic_dock_handler()
488 * - Support external output feature of audio in max77693_muic_dock_handler()
489 * - Support charging through micro-usb port without data in max77693_muic_dock_handler()
491 * - Support charging and data connection through micro-usb port in max77693_muic_dock_handler()
492 * if USB cable is connected between target and host in max77693_muic_dock_handler()
494 * - Support OTG(On-The-Go) device (Ex: Mouse/Keyboard) in max77693_muic_dock_handler()
496 ret = max77693_muic_set_path(info, info->path_usb, attached); in max77693_muic_dock_handler()
500 extcon_set_state_sync(info->edev, EXTCON_DOCK, attached); in max77693_muic_dock_handler()
501 extcon_set_state_sync(info->edev, EXTCON_DISP_MHL, attached); in max77693_muic_dock_handler()
503 case MAX77693_MUIC_ADC_AUDIO_MODE_REMOTE: /* Dock-Desk */ in max77693_muic_dock_handler()
506 case MAX77693_MUIC_ADC_AV_CABLE_NOLOAD: /* Dock-Audio */ in max77693_muic_dock_handler()
509 extcon_set_state_sync(info->edev, EXTCON_USB, false); in max77693_muic_dock_handler()
510 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_SDP, in max77693_muic_dock_handler()
515 dev_err(info->dev, "failed to detect %s dock device\n", in max77693_muic_dock_handler()
517 return -EINVAL; in max77693_muic_dock_handler()
520 /* Dock-Car/Desk/Audio, PATH:AUDIO */ in max77693_muic_dock_handler()
525 extcon_set_state_sync(info->edev, dock_id, attached); in max77693_muic_dock_handler()
534 struct input_dev *dock = info->dock; in max77693_muic_dock_button_handler()
538 case MAX77693_MUIC_ADC_REMOTE_S3_BUTTON-1 in max77693_muic_dock_button_handler()
543 case MAX77693_MUIC_ADC_REMOTE_S7_BUTTON-1 in max77693_muic_dock_button_handler()
556 case MAX77693_MUIC_ADC_REMOTE_S12_BUTTON-1 in max77693_muic_dock_button_handler()
562 dev_err(info->dev, in max77693_muic_dock_button_handler()
563 "failed to detect %s key (adc:0x%x)\n", in max77693_muic_dock_button_handler()
565 return -EINVAL; in max77693_muic_dock_button_handler()
591 extcon_set_state_sync(info->edev, EXTCON_USB_HOST, attached); in max77693_muic_adc_ground_handler()
599 extcon_set_state_sync(info->edev, EXTCON_USB, attached); in max77693_muic_adc_ground_handler()
600 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_SDP, in max77693_muic_adc_ground_handler()
605 /* MHL or MHL with USB/TA cable */ in max77693_muic_adc_ground_handler()
606 extcon_set_state_sync(info->edev, EXTCON_DISP_MHL, attached); in max77693_muic_adc_ground_handler()
609 dev_err(info->dev, "failed to detect %s cable of gnd type\n", in max77693_muic_adc_ground_handler()
611 return -EINVAL; in max77693_muic_adc_ground_handler()
623 dev_info(info->dev, in max77693_muic_jig_handler()
639 dev_err(info->dev, "failed to detect %s jig cable\n", in max77693_muic_jig_handler()
641 return -EINVAL; in max77693_muic_jig_handler()
648 extcon_set_state_sync(info->edev, EXTCON_JIG, attached); in max77693_muic_jig_handler()
664 dev_info(info->dev, in max77693_muic_adc_handler()
667 info->prev_cable_type); in max77693_muic_adc_handler()
683 case MAX77693_MUIC_ADC_RESERVED_ACC_3: /* Dock-Smart */ in max77693_muic_adc_handler()
684 case MAX77693_MUIC_ADC_AUDIO_MODE_REMOTE: /* Dock-Desk */ in max77693_muic_adc_handler()
685 case MAX77693_MUIC_ADC_AV_CABLE_NOLOAD: /* Dock-Audio */ in max77693_muic_adc_handler()
689 * The MAX77693 MUIC device can detect total 34 cable type in max77693_muic_adc_handler()
706 * - the Prev/Next/Volume Up/Volume Down/Play-Pause button in max77693_muic_adc_handler()
708 * The MAX77693 MUIC device can detect total 34 cable type in max77693_muic_adc_handler()
715 button_type = info->prev_button_type = cable_type; in max77693_muic_adc_handler()
717 button_type = info->prev_button_type; in max77693_muic_adc_handler()
744 * needed to detect additional accessory, should implement in max77693_muic_adc_handler()
747 dev_info(info->dev, in max77693_muic_adc_handler()
750 return -EAGAIN; in max77693_muic_adc_handler()
752 dev_err(info->dev, in max77693_muic_adc_handler()
753 "failed to detect %s accessory (adc:0x%x)\n", in max77693_muic_adc_handler()
755 return -EINVAL; in max77693_muic_adc_handler()
773 dev_info(info->dev, in max77693_muic_chg_handler()
776 chg_type, info->prev_chg_type); in max77693_muic_chg_handler()
790 * MHL cable with USB/TA cable in max77693_muic_chg_handler()
791 * - MHL cable include two port(HDMI line and separate in max77693_muic_chg_handler()
792 * micro-usb port. When the target connect MHL cable, in max77693_muic_chg_handler()
793 * extcon driver check whether USB/TA cable is in max77693_muic_chg_handler()
794 * connected. If USB/TA cable is connected, extcon in max77693_muic_chg_handler()
797 * Features of 'USB/TA with MHL cable' in max77693_muic_chg_handler()
798 * - Support MHL in max77693_muic_chg_handler()
799 * - Support charging through micro-usb port without in max77693_muic_chg_handler()
802 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_DCP, in max77693_muic_chg_handler()
804 extcon_set_state_sync(info->edev, EXTCON_DISP_MHL, in max77693_muic_chg_handler()
814 case MAX77693_MUIC_ADC_AV_CABLE_NOLOAD: /* Dock-Audio */ in max77693_muic_chg_handler()
816 * Dock-Audio device with USB/TA cable in max77693_muic_chg_handler()
817 * - Dock device include two port(Dock-Audio and micro- in max77693_muic_chg_handler()
818 * usb port). When the target connect Dock-Audio device, in max77693_muic_chg_handler()
819 * extcon driver check whether USB/TA cable is connected in max77693_muic_chg_handler()
820 * or not. If USB/TA cable is connected, extcon driver in max77693_muic_chg_handler()
823 * Features of 'USB/TA cable with Dock-Audio device' in max77693_muic_chg_handler()
824 * - Support external output feature of audio. in max77693_muic_chg_handler()
825 * - Support charging through micro-usb port without in max77693_muic_chg_handler()
828 extcon_set_state_sync(info->edev, EXTCON_USB, in max77693_muic_chg_handler()
830 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_SDP, in max77693_muic_chg_handler()
834 extcon_set_state_sync(info->edev, EXTCON_DOCK, in max77693_muic_chg_handler()
837 case MAX77693_MUIC_ADC_RESERVED_ACC_3: /* Dock-Smart */ in max77693_muic_chg_handler()
839 * Dock-Smart device with USB/TA cable in max77693_muic_chg_handler()
840 * - Dock-Desk device include three type of cable which in max77693_muic_chg_handler()
841 * are HDMI, USB for mouse/keyboard and micro-usb port in max77693_muic_chg_handler()
842 * for USB/TA cable. Dock-Smart device need always in max77693_muic_chg_handler()
843 * exteranl power supply(USB/TA cable through micro-usb in max77693_muic_chg_handler()
844 * cable). Dock-Smart device support screen output of in max77693_muic_chg_handler()
848 * Features of 'USB/TA cable with Dock-Smart device' in max77693_muic_chg_handler()
849 * - Support MHL in max77693_muic_chg_handler()
850 * - Support external output feature of audio in max77693_muic_chg_handler()
851 * - Support charging through micro-usb port without in max77693_muic_chg_handler()
853 * - Support charging and data connection through micro- in max77693_muic_chg_handler()
854 * usb port if USB cable is connected between target in max77693_muic_chg_handler()
856 * - Support OTG(On-The-Go) device (Ex: Mouse/Keyboard) in max77693_muic_chg_handler()
858 ret = max77693_muic_set_path(info, info->path_usb, in max77693_muic_chg_handler()
863 extcon_set_state_sync(info->edev, EXTCON_DOCK, in max77693_muic_chg_handler()
865 extcon_set_state_sync(info->edev, EXTCON_DISP_MHL, in max77693_muic_chg_handler()
874 * When MHL(with USB/TA cable) or Dock-Audio with USB/TA in max77693_muic_chg_handler()
876 * - 'MAX77693_MUIC_IRQ_INT1_ADC' for detecting in max77693_muic_chg_handler()
877 * MHL/Dock-Audio. in max77693_muic_chg_handler()
878 * - 'MAX77693_MUIC_IRQ_INT2_CHGTYP' for detecting in max77693_muic_chg_handler()
879 * USB/TA cable connected to MHL or Dock-Audio. in max77693_muic_chg_handler()
883 * If user attach MHL (with USB/TA cable and immediately in max77693_muic_chg_handler()
884 * detach MHL with USB/TA cable before MAX77693_MUIC_IRQ in max77693_muic_chg_handler()
885 * _INT2_CHGTYP irq is happened, USB/TA cable remain in max77693_muic_chg_handler()
886 * connected state to target. But USB/TA cable isn't in max77693_muic_chg_handler()
893 /* Only USB cable, PATH:AP_USB */ in max77693_muic_chg_handler()
894 ret = max77693_muic_set_path(info, info->path_usb, in max77693_muic_chg_handler()
899 extcon_set_state_sync(info->edev, EXTCON_USB, in max77693_muic_chg_handler()
901 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_SDP, in max77693_muic_chg_handler()
906 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_DCP, in max77693_muic_chg_handler()
912 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_CDP, in max77693_muic_chg_handler()
916 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_SLOW, in max77693_muic_chg_handler()
920 extcon_set_state_sync(info->edev, EXTCON_CHG_USB_FAST, in max77693_muic_chg_handler()
926 dev_err(info->dev, in max77693_muic_chg_handler()
927 "failed to detect %s accessory (chg_type:0x%x)\n", in max77693_muic_chg_handler()
929 return -EINVAL; in max77693_muic_chg_handler()
939 int irq_type = -1; in max77693_muic_irq_work()
942 if (!info->edev) in max77693_muic_irq_work()
945 mutex_lock(&info->mutex); in max77693_muic_irq_work()
948 if (info->irq == muic_irqs[i].virq) in max77693_muic_irq_work()
951 ret = regmap_bulk_read(info->max77693->regmap_muic, in max77693_muic_irq_work()
952 MAX77693_MUIC_REG_STATUS1, info->status, 2); in max77693_muic_irq_work()
954 dev_err(info->dev, "failed to read MUIC register\n"); in max77693_muic_irq_work()
955 mutex_unlock(&info->mutex); in max77693_muic_irq_work()
987 dev_err(info->dev, "muic interrupt: irq %d occurred\n", in max77693_muic_irq_work()
989 mutex_unlock(&info->mutex); in max77693_muic_irq_work()
994 dev_err(info->dev, "failed to handle MUIC interrupt\n"); in max77693_muic_irq_work()
996 mutex_unlock(&info->mutex); in max77693_muic_irq_work()
1003 info->irq = irq; in max77693_muic_irq_handler()
1004 schedule_work(&info->irq_work); in max77693_muic_irq_handler()
1021 mutex_lock(&info->mutex); in max77693_muic_detect_accessory()
1023 /* Read STATUSx register to detect accessory */ in max77693_muic_detect_accessory()
1024 ret = regmap_bulk_read(info->max77693->regmap_muic, in max77693_muic_detect_accessory()
1025 MAX77693_MUIC_REG_STATUS1, info->status, 2); in max77693_muic_detect_accessory()
1027 dev_err(info->dev, "failed to read MUIC register\n"); in max77693_muic_detect_accessory()
1028 mutex_unlock(&info->mutex); in max77693_muic_detect_accessory()
1037 dev_err(info->dev, "Cannot detect accessory\n"); in max77693_muic_detect_accessory()
1038 mutex_unlock(&info->mutex); in max77693_muic_detect_accessory()
1048 dev_err(info->dev, "Cannot detect charger accessory\n"); in max77693_muic_detect_accessory()
1049 mutex_unlock(&info->mutex); in max77693_muic_detect_accessory()
1054 mutex_unlock(&info->mutex); in max77693_muic_detect_accessory()
1069 struct max77693_dev *max77693 = dev_get_drvdata(pdev->dev.parent); in max77693_muic_probe()
1070 struct max77693_platform_data *pdata = dev_get_platdata(max77693->dev); in max77693_muic_probe()
1081 info = devm_kzalloc(&pdev->dev, sizeof(struct max77693_muic_info), in max77693_muic_probe()
1084 return -ENOMEM; in max77693_muic_probe()
1086 info->dev = &pdev->dev; in max77693_muic_probe()
1087 info->max77693 = max77693; in max77693_muic_probe()
1088 if (info->max77693->regmap_muic) { in max77693_muic_probe()
1089 dev_dbg(&pdev->dev, "allocate register map\n"); in max77693_muic_probe()
1091 info->max77693->regmap_muic = devm_regmap_init_i2c( in max77693_muic_probe()
1092 info->max77693->i2c_muic, in max77693_muic_probe()
1094 if (IS_ERR(info->max77693->regmap_muic)) { in max77693_muic_probe()
1095 ret = PTR_ERR(info->max77693->regmap_muic); in max77693_muic_probe()
1096 dev_err(max77693->dev, in max77693_muic_probe()
1103 info->dock = devm_input_allocate_device(&pdev->dev); in max77693_muic_probe()
1104 if (!info->dock) { in max77693_muic_probe()
1105 dev_err(&pdev->dev, "%s: failed to allocate input\n", __func__); in max77693_muic_probe()
1106 return -ENOMEM; in max77693_muic_probe()
1108 info->dock->name = "max77693-muic/dock"; in max77693_muic_probe()
1109 info->dock->phys = "max77693-muic/extcon"; in max77693_muic_probe()
1110 info->dock->dev.parent = &pdev->dev; in max77693_muic_probe()
1112 __set_bit(EV_REP, info->dock->evbit); in max77693_muic_probe()
1114 input_set_capability(info->dock, EV_KEY, KEY_VOLUMEUP); in max77693_muic_probe()
1115 input_set_capability(info->dock, EV_KEY, KEY_VOLUMEDOWN); in max77693_muic_probe()
1116 input_set_capability(info->dock, EV_KEY, KEY_PLAYPAUSE); in max77693_muic_probe()
1117 input_set_capability(info->dock, EV_KEY, KEY_PREVIOUSSONG); in max77693_muic_probe()
1118 input_set_capability(info->dock, EV_KEY, KEY_NEXTSONG); in max77693_muic_probe()
1120 ret = input_register_device(info->dock); in max77693_muic_probe()
1122 dev_err(&pdev->dev, "Cannot register input device error(%d)\n", in max77693_muic_probe()
1128 mutex_init(&info->mutex); in max77693_muic_probe()
1130 INIT_WORK(&info->irq_work, max77693_muic_irq_work); in max77693_muic_probe()
1137 virq = regmap_irq_get_virq(max77693->irq_data_muic, in max77693_muic_probe()
1138 muic_irq->irq); in max77693_muic_probe()
1140 return -EINVAL; in max77693_muic_probe()
1141 muic_irq->virq = virq; in max77693_muic_probe()
1143 ret = devm_request_threaded_irq(&pdev->dev, virq, NULL, in max77693_muic_probe()
1146 muic_irq->name, info); in max77693_muic_probe()
1148 dev_err(&pdev->dev, in max77693_muic_probe()
1150 muic_irq->irq, ret); in max77693_muic_probe()
1156 info->edev = devm_extcon_dev_allocate(&pdev->dev, in max77693_muic_probe()
1158 if (IS_ERR(info->edev)) { in max77693_muic_probe()
1159 dev_err(&pdev->dev, "failed to allocate memory for extcon\n"); in max77693_muic_probe()
1160 return PTR_ERR(info->edev); in max77693_muic_probe()
1163 ret = devm_extcon_dev_register(&pdev->dev, info->edev); in max77693_muic_probe()
1165 dev_err(&pdev->dev, "failed to register extcon device\n"); in max77693_muic_probe()
1170 if (pdata && pdata->muic_data) { in max77693_muic_probe()
1171 init_data = pdata->muic_data->init_data; in max77693_muic_probe()
1172 num_init_data = pdata->muic_data->num_init_data; in max77693_muic_probe()
1179 regmap_write(info->max77693->regmap_muic, in max77693_muic_probe()
1184 if (pdata && pdata->muic_data) { in max77693_muic_probe()
1186 = pdata->muic_data; in max77693_muic_probe()
1189 * Default usb/uart path whether UART/USB or AUX_UART/AUX_USB in max77693_muic_probe()
1192 if (muic_pdata->path_uart) in max77693_muic_probe()
1193 info->path_uart = muic_pdata->path_uart; in max77693_muic_probe()
1195 info->path_uart = MAX77693_CONTROL1_SW_UART; in max77693_muic_probe()
1197 if (muic_pdata->path_usb) in max77693_muic_probe()
1198 info->path_usb = muic_pdata->path_usb; in max77693_muic_probe()
1200 info->path_usb = MAX77693_CONTROL1_SW_USB; in max77693_muic_probe()
1206 if (muic_pdata->detcable_delay_ms) in max77693_muic_probe()
1208 msecs_to_jiffies(muic_pdata->detcable_delay_ms); in max77693_muic_probe()
1212 info->path_usb = MAX77693_CONTROL1_SW_USB; in max77693_muic_probe()
1213 info->path_uart = MAX77693_CONTROL1_SW_UART; in max77693_muic_probe()
1218 ret = regmap_bulk_read(info->max77693->regmap_muic, in max77693_muic_probe()
1219 MAX77693_MUIC_REG_STATUS1, info->status, 2); in max77693_muic_probe()
1221 dev_err(info->dev, "failed to read MUIC register\n"); in max77693_muic_probe()
1228 max77693_muic_set_path(info, info->path_uart, true); in max77693_muic_probe()
1231 ret = regmap_read(info->max77693->regmap_muic, in max77693_muic_probe()
1234 dev_err(&pdev->dev, "failed to read revision number\n"); in max77693_muic_probe()
1237 dev_info(info->dev, "device ID : 0x%x\n", id); in max77693_muic_probe()
1243 * Detect accessory after completing the initialization of platform in max77693_muic_probe()
1245 * - Use delayed workqueue to detect cable state and then in max77693_muic_probe()
1250 INIT_DELAYED_WORK(&info->wq_detcable, max77693_muic_detect_cable_wq); in max77693_muic_probe()
1251 queue_delayed_work(system_power_efficient_wq, &info->wq_detcable, in max77693_muic_probe()
1261 cancel_work_sync(&info->irq_work); in max77693_muic_remove()
1262 input_unregister_device(info->dock); in max77693_muic_remove()
1280 MODULE_ALIAS("platform:max77693-muic");