diff --git a/drivers/amlogic/bluetooth/bt_device.c b/drivers/amlogic/bluetooth/bt_device.c index e9d8f306db4e..c18a676790ea 100644 --- a/drivers/amlogic/bluetooth/bt_device.c +++ b/drivers/amlogic/bluetooth/bt_device.c @@ -86,8 +86,7 @@ static void bt_device_on(struct bt_dev_data *pdata) && (pdata->power_low_level)) { gpio_direction_input(pdata->gpio_en); } else { - gpio_direction_output(pdata->gpio_en, - pdata->power_low_level); + set_usb_bt_power(0); } } msleep(200); @@ -107,8 +106,7 @@ static void bt_device_on(struct bt_dev_data *pdata) && (!pdata->power_low_level)) { gpio_direction_input(pdata->gpio_en); } else { - gpio_direction_output(pdata->gpio_en, - !pdata->power_low_level); + set_usb_bt_power(1); } } msleep(200); @@ -132,8 +130,7 @@ static void bt_device_off(struct bt_dev_data *pdata) && (pdata->power_low_level)) { gpio_direction_input(pdata->gpio_en); } else { - gpio_direction_output(pdata->gpio_en, - pdata->power_low_level); + set_usb_bt_power(0); } } msleep(20); diff --git a/drivers/amlogic/wifi/wifi_dt.c b/drivers/amlogic/wifi/wifi_dt.c index aaadd9819b7b..98cd411662c8 100644 --- a/drivers/amlogic/wifi/wifi_dt.c +++ b/drivers/amlogic/wifi/wifi_dt.c @@ -57,7 +57,7 @@ struct pwm_double_data { struct pwm_double_datas { int num_pwm; - struct pwm_double_data pwms[0]; + struct pwm_double_data pwms[2]; }; struct pwm_single_data { @@ -207,15 +207,19 @@ static void usb_power_control(int is_power, int shift) { mutex_lock(&wifi_bt_mutex); if (is_power) { - if (!usb_power) + if (!usb_power) { set_wifi_power(is_power); + WIFI_INFO("Set %s power on !\n", (shift ? "WiFi":"BT")); + sdio_reinit(); + } usb_power |= (1 << shift); WIFI_INFO("Set %s power on !\n", (shift ? "WiFi":"BT")); } else { usb_power &= ~(1 << shift); - if (!usb_power) + if (!usb_power) { set_wifi_power(is_power); - WIFI_INFO("Set %s power down !\n", (shift ? "WiFi":"BT")); + WIFI_INFO("Set %s power down\n", (shift ? "WiFi":"BT")); + } } mutex_unlock(&wifi_bt_mutex); } @@ -287,9 +291,9 @@ void pci_remove_reinit(unsigned int vid, unsigned int pid, unsigned int delBus) WIFI_INFO("target pci device not found 0x%x:0x%x\n", vid, pid); } - extern_wifi_set_enable(0); + set_usb_wifi_power(0); msleep(200); - extern_wifi_set_enable(1); + set_usb_wifi_power(1); msleep(200); pci_lock_rescan_remove(); @@ -315,22 +319,23 @@ static long wifi_power_ioctl(struct file *filp, set_usb_wifi_power(0); mdelay(200); set_usb_wifi_power(1); + WIFI_INFO(KERN_INFO "ioctl Set usb_sdio wifi power up!\n"); break; case USB_POWER_DOWN: set_usb_wifi_power(0); - WIFI_INFO("Set usb_sdio wifi power down!\n"); + WIFI_INFO(KERN_INFO "ioctl Set usb_sdio wifi power down!\n"); break; case WIFI_POWER_UP: - extern_wifi_set_enable(0); + set_usb_wifi_power(0); mdelay(200); - extern_wifi_set_enable(1); + set_usb_wifi_power(1); mdelay(200); - sdio_reinit(); pci_reinit(); WIFI_INFO("Set sdio wifi power up!\n"); break; case WIFI_POWER_DOWN: - extern_wifi_set_enable(0); + set_usb_wifi_power(0); + WIFI_INFO("ioctl Set sdio wifi power down!\n"); break; case SDIO_GET_DEV_TYPE: memcpy(dev_type, get_wifi_inf(), strlen(get_wifi_inf())); diff --git a/include/linux/amlogic/bt_device.h b/include/linux/amlogic/bt_device.h index 51bbbc4f8184..e0c6de19c55b 100644 --- a/include/linux/amlogic/bt_device.h +++ b/include/linux/amlogic/bt_device.h @@ -24,5 +24,5 @@ struct bt_dev_data { int power_low_level; int power_on_pin_OD; }; - +extern void set_usb_bt_power(int is_power); #endif