static int bluetooth_set_sleep(void *data, enum rfkill_user_states state) { int ret =0; switch (state) { case RFKILL_USER_STATE_UNBLOCKED: printk ("[BT] In the unblocked state of the sleep\n"); if (gpio_is_valid(GPIO_BT_WAKE)) { ret = gpio_request(GPIO_BT_WAKE, "GPG3"); if(ret < 0) { printk(KERN_ERR "[BT] Failed to request GPIO_BT_WAKE!\n"); return ret; } gpio_direction_output(GPIO_BT_WAKE, GPIO_LEVEL_LOW); } s3c_gpio_setpull(GPIO_BT_WAKE, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_BT_WAKE, GPIO_LEVEL_LOW); printk(KERN_DEBUG "[BT] GPIO_BT_WAKE = %d\n", gpio_get_value(GPIO_BT_WAKE) ); gpio_free(GPIO_BT_WAKE); printk("[BT] wake_unlock(bt_wake_lock)\n"); wake_unlock(&bt_wake_lock); if(bt_init_complete && lpaudio_lock) { s5p_set_lpaudio_lock(0); lpaudio_lock = 0; } break; case RFKILL_USER_STATE_SOFT_BLOCKED: printk ("[BT] In the soft blocked state of the sleep\n"); if (gpio_is_valid(GPIO_BT_WAKE)) { ret = gpio_request(GPIO_BT_WAKE, "GPG3"); if(ret < 0) { printk(KERN_ERR "[BT] Failed to request GPIO_BT_WAKE!\n"); return ret; } gpio_direction_output(GPIO_BT_WAKE, GPIO_LEVEL_HIGH); } s3c_gpio_setpull(GPIO_BT_WAKE, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_BT_WAKE, GPIO_LEVEL_HIGH); printk(KERN_DEBUG "[BT] GPIO_BT_WAKE = %d\n", gpio_get_value(GPIO_BT_WAKE) ); gpio_free(GPIO_BT_WAKE); printk("[BT] wake_lock(bt_wake_lock)\n"); wake_lock(&bt_wake_lock); break; default: printk(KERN_ERR "[BT] bad bluetooth rfkill state %d\n", state); } return 0; }
static void bt_host_wake_work_func(struct work_struct *ignored) { printk(KERN_DEBUG "[BT] wake_lock timeout = 5 sec\n"); wake_lock_timeout(&rfkill_wake_lock, 5*HZ); if(bt_init_complete && !lpaudio_lock) { s5p_set_lpaudio_lock(1); lpaudio_lock = 1; } enable_irq(IRQ_BT_HOST_WAKE); }
static int mfc_open(struct inode *inode, struct file *file) { mfc_inst_ctx *mfc_ctx; int ret; //struct sched_param param = { .sched_priority = 1 }; #if ENABLE_MONITORING_MFC_DD mfc_info("MFC mfc_open..\n"); #endif mutex_lock(&mfc_mutex); if (!mfc_is_running()) { #ifdef CONFIG_CPU_FREQ_S5PV210 s5pv210_set_cpufreq_level(RESTRICT_TABLE); #endif /* CONFIG_CPU_FREQ_S5PV210 */ #ifdef CONFIG_S5P_LPAUDIO s5p_set_lpaudio_lock(1); #endif /* CONFIG_S5P_LPAUDIO */ if (s5pv210_pd_enable("mfc_pd") < 0){ printk(KERN_ERR "[Error]The power is not on for mfc\n"); return -1; } clk_enable(mfc_clk); #ifdef CONFIG_PM_PWR_GATING s5pc110_lock_power_domain(MFC_DOMAIN_LOCK_TOKEN); #endif if (mfc_init_hw() != TRUE) { #if Frame_Base_Power_CTR_ON clk_disable(mfc_clk); if (s5pv210_pd_disable("mfc_pd") < 0) { printk(KERN_ERR "[Error]The power is not off for mfc\n"); return -1; } #endif ret = -ENODEV; goto out_open; } #if Frame_Base_Power_CTR_ON clk_disable(mfc_clk); /*if (s5pv210_pd_disable("mfc_pd") < 0) { printk(KERN_ERR "[Error]The power is not off for mfc\n"); return -1; }*/ #endif } mfc_ctx = (mfc_inst_ctx *)kmalloc(sizeof(mfc_inst_ctx), GFP_KERNEL); if (mfc_ctx == NULL) { mfc_err("MFCINST_MEMORY_ALLOC_FAIL\n"); ret = -ENOMEM; goto out_open; } memset(mfc_ctx, 0, sizeof(mfc_inst_ctx)); /* get the inst no allocating some part of memory among reserved memory */ mfc_ctx->mem_inst_no = mfc_get_mem_inst_no(); mfc_ctx->InstNo = -1; if (mfc_ctx->mem_inst_no < 0) { mfc_err("MFCINST_INST_NUM_EXCEEDED\n"); kfree(mfc_ctx); ret = -EPERM; goto out_open; } if (mfc_set_state(mfc_ctx, MFCINST_STATE_OPENED) < 0) { mfc_err("MFCINST_ERR_STATE_INVALID\n"); kfree(mfc_ctx); ret = -ENODEV; goto out_open; } /* Decoder only */ mfc_ctx->extraDPB = MFC_MAX_EXTRA_DPB; mfc_ctx->FrameType = MFC_RET_FRAME_NOT_SET; file->private_data = (mfc_inst_ctx *)mfc_ctx; //sched_setscheduler(current, SCHED_FIFO, ¶m); ret = 0; out_open: mutex_unlock(&mfc_mutex); if(ret != 0) { mfc_err("MFC_OEPN_FAIL..... ret(%d) \n", ret); return ret; } #if ENABLE_MONITORING_MFC_DD mfc_info("MFC_OEPN_OK..... ret(%d) \n", ret); #endif return ret; }
static int mfc_release(struct inode *inode, struct file *file) { mfc_inst_ctx *mfc_ctx; int ret; #if ENABLE_MONITORING_MFC_DD mfc_info("MFC Release..\n"); #endif mutex_lock(&mfc_mutex); #if Frame_Base_Power_CTR_ON /*if (s5pv210_pd_enable("mfc_pd") < 0) { printk(KERN_ERR "[Error]The power is not on for mfc\n"); return -1; }*/ clk_enable(mfc_clk); #endif mfc_ctx = (mfc_inst_ctx *)file->private_data; if (mfc_ctx == NULL) { mfc_err("MFCINST_ERR_INVALID_PARAM\n"); ret = -EIO; goto out_release; } mfc_release_all_buffer(mfc_ctx->mem_inst_no); mfc_merge_fragment(mfc_ctx->mem_inst_no); mfc_return_mem_inst_no(mfc_ctx->mem_inst_no); /* In case of no instance, we should not release codec instance */ if (mfc_ctx->InstNo >= 0) mfc_return_inst_no(mfc_ctx->InstNo, mfc_ctx->MfcCodecType); kfree(mfc_ctx); ret = 0; out_release: if (!mfc_is_running()) { #ifdef CONFIG_CPU_FREQ_S5PV210 s5pv210_set_cpufreq_level(NORMAL_TABLE); #endif /* CONFIG_CPU_FREQ_S5PV210 */ #ifdef CONFIG_PM_PWR_GATING s5pc110_unlock_power_domain(MFC_DOMAIN_LOCK_TOKEN); #endif #ifdef CONFIG_S5P_LPAUDIO s5p_set_lpaudio_lock(0); #endif /* CONFIG_S5P_LPAUDIO */ } clk_disable(mfc_clk); if (s5pv210_pd_disable("mfc_pd") < 0) { printk(KERN_ERR "[Error]The power is not off for mfc\n"); return -1; } mutex_unlock(&mfc_mutex); return ret; }