static int hcismd_set_enable(const char *val, struct kernel_param *kp) { #if 1 /* HTC_BT modify */ /* note: add get parameter value feature */ int ret = 0; unsigned long enable; ret = strict_strtoul(val, 10, &enable); if (ret) return ret; if ( hcismd_set == enable ) return 0; mutex_lock(&hci_smd_enable); switch (enable) { case 1: if (0 == hci_smd_register_dev(&hs)) hcismd_set = 1; break; case 0: hci_smd_deregister_dev(&hs); hcismd_set = 0; break; default: ret = -EFAULT; } mutex_unlock(&hci_smd_enable); return ret; #else /* QCT original */ int ret = 0; mutex_lock(&hci_smd_enable); ret = param_set_int(val, kp); if (ret) goto done; switch (hcismd_set) { case 1: hci_smd_register_dev(&hs); break; case 0: hci_smd_deregister_dev(&hs); break; default: ret = -EFAULT; } done: mutex_unlock(&hci_smd_enable); return ret; #endif /* HTC_BT modify */ }
static int hcismd_set_enable(const char *val, struct kernel_param *kp) { int ret = 0; mutex_lock(&hci_smd_enable); ret = param_set_int(val, kp); if (ret) goto done; switch (hcismd_set) { case 1: hci_smd_register_dev(&hs); break; case 0: hci_smd_deregister_dev(&hs); break; default: ret = -EFAULT; } done: mutex_unlock(&hci_smd_enable); return ret; }
static void hci_dev_restart(struct work_struct *worker) { mutex_lock(&hci_smd_enable); hci_smd_deregister_dev(&hs); hci_smd_register_dev(&hs); mutex_unlock(&hci_smd_enable); kfree(worker); }
static int __init hci_smd_init(void) { hci_smd_register_dev(&hs); return 0; }