static inline void mc13783_set_peripheral(void) { PMIC_STATUS rs = PMIC_ERROR; rs = pmic_convity_usb_otg_clear_config(pmic_handle, USB_UDM_PD); rs |= pmic_convity_usb_otg_clear_config(pmic_handle, USB_UDP_PD); rs |= pmic_convity_usb_set_speed(pmic_handle, USB_FULL_SPEED); rs |= pmic_convity_usb_otg_set_config(pmic_handle, USB_OTG_SE0CONN); rs |= pmic_convity_usb_otg_set_config(pmic_handle, USB_PU); if (rs != PMIC_SUCCESS) printk(KERN_ERR "mc13783_set_peripheral failed\n"); }
void mxc_pmic_mod_exit(struct otg_instance *otg) { PMIC_STATUS rc; if (pmic_work_task) { otg_task_exit(pmic_work_task); pmic_work_task = NULL; } if (pmic_otg_task) { otg_task_exit(pmic_otg_task); pmic_otg_task = NULL; } //while (PENDING_WORK_ITEM(pmic_work_bh)) { // printk(KERN_ERR "%s: waiting for mc13783_work_bh\n", // __FUNCTION__); // schedule_timeout(10 * HZ); //} //while (PENDING_WORK_ITEM(pmic_otg_wq)) { // printk(KERN_ERR "%s: waiting for mc13783_otg_wq\n", // __FUNCTION__); // schedule_timeout(10 * HZ); //} pmic_convity_set_mode(pmic_handle, RS232_1); pmic_convity_usb_otg_set_config(pmic_handle, USB_PULL_OVERRIDE); pmic_convity_usb_otg_set_config(pmic_handle, USB_OTG_SE0CONN); pmic_convity_usb_otg_clear_config(pmic_handle, USB_USBCNTRL); pmic_convity_usb_otg_clear_config(pmic_handle, USB_PU); pmic_convity_usb_otg_clear_config(pmic_handle, USB_UDP_PD); pmic_convity_usb_otg_clear_config(pmic_handle, USB_UDM_PD); pmic_convity_clear_callback(pmic_handle); rc = pmic_convity_close(pmic_handle); if (rc != PMIC_SUCCESS) { pr_debug("pmic_convity_close() returned error %d", rc); } }
/*! pmic_bh- work task bottom handler * @param data - otg_instance type pointer * */ void pmic_bh(void *data) { struct otg_instance *otg = (struct otg_instance *) data; do { // printk(KERN_INFO"%s: AAAA\n", __FUNCTION__); TRACE_MSG0(REMOVE_TCD, "--"); global_flag = global_flag_array[start_flag]; if (global_flag & PUDP_FLAG_SET) { //set DP pullup pmic_convity_usb_set_speed(pmic_handle, USB_FULL_SPEED); pmic_convity_usb_otg_set_config(pmic_handle, USB_PU); } if (global_flag & PUDP_FLAG_RESET) { //reset DP pullup pmic_convity_usb_set_speed(pmic_handle, USB_FULL_SPEED); pmic_convity_usb_otg_clear_config(pmic_handle, USB_PU); } if (global_flag & PUDM_FLAG_SET) { //set DM pullup pmic_convity_usb_set_speed(pmic_handle, USB_LOW_SPEED); pmic_convity_usb_otg_set_config(pmic_handle, USB_PU); } if (global_flag & PUDM_FLAG_RESET) { //reset DM pullup pmic_convity_usb_set_speed(pmic_handle, USB_LOW_SPEED); pmic_convity_usb_otg_clear_config(pmic_handle, USB_PU); } if (global_flag & UPD_FLAG_SET) { //set DP pulldown pmic_convity_usb_otg_set_config(pmic_handle, USB_UDP_PD); //DP pull down switch is on } if (global_flag & UPD_FLAG_RESET) { //reset DP pulldown pmic_convity_usb_otg_clear_config(pmic_handle, USB_UDP_PD); //DP pull down switch is off } if (global_flag & UDM_FLAG_SET) { //set DM pulldown pmic_convity_usb_otg_set_config(pmic_handle, USB_UDM_PD); //DP pull down switch is on } if (global_flag & UDM_FLAG_RESET) { //reset DM pulldown pmic_convity_usb_otg_clear_config(pmic_handle, USB_UDM_PD); //DP pull down switch is off } if (global_flag & DRV_VBUS_SET) { //enable vbus voltage pmic_convity_set_output(pmic_handle, TRUE, TRUE); //enable VBUS } if (global_flag & DRV_VBUS_RESET) { //disable vbus voltage pmic_convity_set_output(pmic_handle, TRUE, FALSE); //disable VBUS } if (global_flag & CHRG_VBUS_SET) { //enable vbus pmic_convity_usb_otg_set_config(pmic_handle, USB_VBUS_CURRENT_LIMIT_LOW_30MS); } if (global_flag & CHRG_VBUS_RESET) { //disable vbus pmic_convity_set_output(pmic_handle, TRUE, FALSE); //disable VBUS } if (global_flag & DISCHRG_VBUS_SET) { //discharge vbus pmic_convity_set_output(pmic_handle, TRUE, FALSE); //disable VBUS pmic_convity_usb_otg_clear_config(pmic_handle, USB_VBUS_PULLDOWN); pmic_convity_usb_set_power_source(pmic_handle, USB_POWER_INTERNAL, USB_POWER_3V3); pmic_convity_set_output(pmic_handle, FALSE, TRUE); //enable VUSB } if (global_flag & DISCHRG_VBUS_RESET) { //discharge vbus disable pmic_convity_set_output(pmic_handle, TRUE, FALSE); //disable VBUS pmic_convity_usb_otg_set_config(pmic_handle, USB_VBUS_PULLDOWN); pmic_convity_set_output(pmic_handle, FALSE, TRUE); //enable VUSB } #if 1 TRACE_MSG3(REMOVE_TCD, "gloabl flag %d start_flag %d end_flag %d", global_flag, start_flag, end_flag); #endif #if 0 printk(KERN_INFO "%d %d %d %d %d %d %d %d\n", (global_flag & PU_FLAG_SET), (global_flag & PU_FLAG_RESET), (global_flag & UPD_FLAG_SET), (global_flag & UPD_FLAG_RESET), (global_flag & UDM_FLAG_SET), (global_flag & UDM_FLAG_RESET), (global_flag & VBUSPDENB_RESET), (global_flag & VBUSREGEN_RESET)); #endif global_flag = 0; global_flag_array[start_flag] = 0; if (start_flag++ > 15) start_flag = 0; //if (start_flag != end_flag) // SCHEDULE_WORK(pmic_work_bh); // printk(KERN_INFO"%s: BBBB start: %d end: %d\n", __FUNCTION__, start_flag, end_flag); } while (start_flag != end_flag); // printk(KERN_INFO"%s: CCCC\n", __FUNCTION__); }
int mxc_pmic_mod_init(struct otg_instance *otg) { PMIC_CONVITY_USB_TRANSCEIVER_MODE transceiver; PMIC_STATUS rc = PMIC_ERROR; rc = pmic_convity_open(&pmic_handle, USB); if (rc != PMIC_SUCCESS) { printk(KERN_INFO "Failed to connect to the transceiver\n"); } TRACE_MSG0(REMOVE_TCD, "Setup the work item"); //PREPARE_WORK_ITEM(pmic_work_bh, &pmic_bh, NULL); //PREPARE_WORK_ITEM(pmic_otg_wq, &pmic_otg_event_bh, NULL); THROW_UNLESS((pmic_work_task = otg_task_init2("tcdwork", pmic_work_proc, otg, otg->tcd->TAG)), error); THROW_UNLESS((pmic_otg_task = otg_task_init2("tcdotg", pmic_otg_proc, otg, otg->tcd->TAG)), error); otg_task_start(pmic_work_task); otg_task_start(pmic_otg_task); if (pmic_convity_usb_get_xcvr(pmic_handle, &transceiver)) printk(KERN_INFO "%s: pmic_convity_get_usb_transciver failed\n", __FUNCTION__); printk(KERN_INFO "%s: tw: %02x\n", __FUNCTION__, transceiver); pmic_convity_set_callback(pmic_handle, pmic_detect_event, USB_DETECT_4V4_RISE | USB_DETECT_4V4_FALL | USB_DETECT_2V0_RISE | USB_DETECT_2V0_FALL | USB_DETECT_0V8_RISE | USB_DETECT_0V8_FALL | USB_DETECT_MINI_A | USB_DETECT_MINI_B); if (rc != PMIC_SUCCESS) { } // XXX it may be more appropriate to do this in the enable function // // and reset to something when disaabled pmic_convity_usb_otg_set_config(pmic_handle, USB_PULL_OVERRIDE); pmic_convity_usb_otg_set_config(pmic_handle, USB_USBCNTRL); start_flag = end_flag = 0; CATCH(error) { if (pmic_work_task) { otg_task_exit(pmic_work_task); pmic_work_task = NULL; } if (pmic_otg_task) { otg_task_exit(pmic_otg_task); pmic_otg_task = NULL; } return -EINVAL; } return 0; }