static int __init sw_rfkill_init(void) { script_item_value_type_e type; script_item_u val; struct gpio_config *gpio_p = NULL; type = script_get_item("bt_para", "bt_used", &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { RF_MSG("failed to fetch bt configuration!\n"); return -1; } if (!val.val) { RF_MSG("init no bt used in configuration\n"); return 0; } bt_used = val.val; bt_rst_n = -1; type = script_get_item("bt_para", "bt_rst_n", &val); if (SCIRPT_ITEM_VALUE_TYPE_PIO!=type) RF_MSG("mod has no bt_rst_n gpio\n"); else { gpio_p = &val.gpio; bt_rst_n = gpio_p->gpio; sunxi_gpio_req(gpio_p); } platform_device_register(&sw_rfkill_dev); return platform_driver_register(&sw_rfkill_driver); }
static int rfkill_set_power(void *data, bool blocked) { unsigned int mod_sel = get_rf_mod_type(); RF_MSG("rfkill set power %d\n", blocked); switch (mod_sel){ case 2: /* rtl8723bs */ case 4: /* ap6210 */ case 5: /* ap6330 */ case 6: /* ap6335 */ if (!blocked) { if(bt_rst_n != -1) gpio_set_value(bt_rst_n, 1); } else { if(bt_rst_n != -1) gpio_set_value(bt_rst_n, 0); } break; default: RF_MSG("no bt module matched !!\n"); } msleep(10); return 0; }
static int rfkill_set_power(void *data, bool blocked) { unsigned int mod_sel = mmc_pm_get_mod_type(); RF_MSG("rfkill set power %d\n", blocked); #ifdef AW_SUPPORT_1IN1_BT rfkill_bt_set_power(blocked); #endif spin_lock(&bt_power_lock); switch (mod_sel) { case 2: /* usi bm01a */ if (!blocked) { mmc_pm_gpio_ctrl("usi_bm01a_bt_regon", 1); mmc_pm_gpio_ctrl("usi_bm01a_bt_rst", 1); } else { mmc_pm_gpio_ctrl("usi_bm01a_bt_regon", 0); mmc_pm_gpio_ctrl("usi_bm01a_bt_rst", 0); } break; case 5: /* swb b23 */ if (!blocked) { mmc_pm_gpio_ctrl("swbb23_bt_shdn", 1); } else { mmc_pm_gpio_ctrl("swbb23_bt_shdn", 0); } break; case 6: /* huawei mw269x */ if (!blocked) { mmc_pm_gpio_ctrl("hw_mw269x_bt_wake", 1); mmc_pm_gpio_ctrl("hw_mw269x_bt_enb", 1); } else { mmc_pm_gpio_ctrl("hw_mw269x_bt_enb", 0); mmc_pm_gpio_ctrl("hw_mw269x_bt_wake", 0); } break; case 8: /* bcm40183 */ if (!blocked) { mmc_pm_gpio_ctrl("bcm40183_bt_regon", 1); mmc_pm_gpio_ctrl("bcm40183_bt_rst", 1); } else { mmc_pm_gpio_ctrl("bcm40183_bt_regon", 0); mmc_pm_gpio_ctrl("bcm40183_bt_rst", 0); } break; case 9: /* realtek rtl8723as */ if (!blocked) { mmc_pm_gpio_ctrl("rtk_rtl8723as_bt_dis", 1); } else { mmc_pm_gpio_ctrl("rtk_rtl8723as_bt_dis", 0); } break; default: RF_MSG("no bt module matched !!\n"); } spin_unlock(&bt_power_lock); msleep(100); return 0; }
static int rfkill_set_power(void *data, bool blocked) { unsigned int mod_sel = wifi_pm_get_mod_type(); RF_MSG("rfkill set power %d\n", blocked); switch (mod_sel) { case 2: /* ap6210 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 0); } break; case 3: /* realtek rtl8723as */ if (!blocked) { wifi_pm_gpio_ctrl("rtk_rtl8723as_bt_dis", 1); } else { wifi_pm_gpio_ctrl("rtk_rtl8723as_bt_dis", 0); } break; case 7: /* mtk6620 */ RF_MSG("[init] just record bt module select %d !!\n",mod_sel); break; case 8: /* realtek rtl8723au */ if (!blocked) { wifi_pm_gpio_ctrl("rtl8723au_bt", 1); } else { wifi_pm_gpio_ctrl("rtl8723au_bt", 0); } break; case 9: /* ap6330 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 0); } break; case 10: /* ap6476 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 0); } break; case 11: /* realtek rtl8723bs */ if (!blocked) { wifi_pm_gpio_ctrl("rtl8723bs_bt_regon", 1); } else { wifi_pm_gpio_ctrl("rtl8723bs_bt_regon", 0); } break; default: RF_MSG("no bt module matched !!\n"); } msleep(10); return 0; }
static int rfkill_set_power(void *data, bool blocked) { unsigned int mod_sel = wifi_pm_get_mod_type(); RF_MSG("rfkill set power %d\n", blocked); switch (mod_sel) { case 2: /* bcm40183 */ if (!blocked) { wifi_pm_gpio_ctrl("bcm40183_bt_regon", 1); wifi_pm_gpio_ctrl("bcm40183_bt_rst", 1); } else { wifi_pm_gpio_ctrl("bcm40183_bt_rst", 0); wifi_pm_gpio_ctrl("bcm40183_bt_regon", 0); } break; case 3: /* realtek rtl8723as */ if (!blocked) { wifi_pm_gpio_ctrl("rtk_rtl8723as_bt_dis", 1); } else { wifi_pm_gpio_ctrl("rtk_rtl8723as_bt_dis", 0); } break; case 7: /* ap6210 */ case 8: /* ap6330 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 0); } break; case 10: /* realtek rtl8723au */ if (!blocked) { wifi_pm_gpio_ctrl("rtl8723au_bt", 1); } else { wifi_pm_gpio_ctrl("rtl8723au_bt", 0); } break; default: RF_MSG("no bt module matched !!\n"); } msleep(10); return 0; }
static int __init sw_rfkill_init(void) { script_item_value_type_e type; type = script_get_item("bt_para", "bt_used", &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { RF_MSG("failed to fetch bt configuration!\n"); return -1; } if (!val.val) { RF_MSG("init no bt used in configuration\n"); return 0; } platform_device_register(&sw_rfkill_dev); return platform_driver_register(&sw_rfkill_driver); }
static int rfkill_set_power(void *data, bool blocked) { unsigned int mod_sel = wifi_pm_get_mod_type(); if(blocked)blocked = false; RF_MSG("rfkill set power %d\n", blocked); switch (mod_sel) { case 2: /* ap6210 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } break; case 4: /* realtek rtl8723au */ if (!blocked) { wifi_pm_gpio_ctrl("rtl8723au_bt", 1); } else { wifi_pm_gpio_ctrl("rtl8723au_bt", 1); } break; case 5: /* realtek rtl8723bs */ if (!blocked) { wifi_pm_gpio_ctrl("rtl8723bs_bt_regon", 1); } else { wifi_pm_gpio_ctrl("rtl8723bs_bt_regon", 1); } break; case 7: /* ap6476 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } break; default: RF_MSG("no bt module matched !!\n"); } msleep(10); return 0; }
static void __exit sw_rfkill_exit(void) { if (!val.val) { RF_MSG("exit no bt used in configuration"); return ; } platform_device_unregister(&sw_rfkill_dev); platform_driver_unregister(&sw_rfkill_driver); }
static int rfkill_set_power(void *data, bool blocked) { unsigned int mod_sel = mmc_pm_get_mod_type(); RF_MSG("rfkill set power %d\n", blocked); spin_lock(&bt_power_lock); switch (mod_sel) { case 2: /* usi bm01a */ if (!blocked) { mmc_pm_gpio_ctrl("usi_bm01a_bt_regon", 1); mmc_pm_gpio_ctrl("usi_bm01a_bt_rst", 1); } else { mmc_pm_gpio_ctrl("usi_bm01a_bt_regon", 0); mmc_pm_gpio_ctrl("usi_bm01a_bt_rst", 0); } break; case 5: /* swb b23 */ if (!blocked) { mmc_pm_gpio_ctrl("swbb23_bt_shdn", 1); } else { mmc_pm_gpio_ctrl("swbb23_bt_shdn", 0); } break; case 6: /* huawei mw269x */ if (!blocked) { mmc_pm_gpio_ctrl("hw_mw269x_bt_wake", 1); mmc_pm_gpio_ctrl("hw_mw269x_bt_enb", 1); } else { mmc_pm_gpio_ctrl("hw_mw269x_bt_enb", 0); mmc_pm_gpio_ctrl("hw_mw269x_bt_wake", 0); } break; default: RF_MSG("no bt module matched !!\n"); } spin_unlock(&bt_power_lock); msleep(100); return 0; }