mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
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:
@@ -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);
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user