wifi/bt: for wifi/bt share the power pin

PD#156561: for wifi/bt share the power pin

Change-Id: Id10edb58cf6d6d8658c40b6d1ec7004838527efe
Signed-off-by: Larson Jiang <larson.jiang@amlogic.com>
This commit is contained in:
Larson Jiang
2018-01-03 13:37:18 +08:00
parent 12791b88fb
commit 91f14cf381
3 changed files with 20 additions and 18 deletions

View File

@@ -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);

View File

@@ -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()));

View File

@@ -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