コード例 #1
0
ファイル: board-rfkill.c プロジェクト: 8497165/JetKernel
static int __init smdk6410_btsleep_probe(struct platform_device *pdev)
#endif	/* #ifdef CONFIG_MACH_JET */
#endif	/* #ifdef CONFIG_MACH_SPICA */
#endif	/* #ifdef CONFIG_MACH_INSTINCTQ */
{
    int rc = 0;

    bt_sleep = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);
    if (!bt_sleep)
        return -ENOMEM;

    bt_sleep->name = bt_name;
    bt_sleep->state = RFKILL_STATE_UNBLOCKED;
    /* userspace cannot take exclusive control */
    bt_sleep->user_claim_unsupported = 1;
    bt_sleep->user_claim = 0;
    bt_sleep->data = NULL;  // user data
    bt_sleep->toggle_radio = bluetooth_set_sleep;

    rc = rfkill_register(bt_sleep);
    if (rc)
        rfkill_free(bt_sleep);

#ifdef CONFIG_MACH_INSTINCTQ
    printk("[BT] rfkill_force_state(bt_sleep, RFKILL_STATE_UNBLOCKED) \n");
#else
    printk(KERN_DEBUG "[BT] rfkill_force_state(bt_sleep, RFKILL_STATE_UNBLOCKED) \n");
#endif	/* #ifdef CONFIG_MACH_INSTINCTQ */
    rfkill_force_state(bt_sleep, RFKILL_STATE_UNBLOCKED);

    bluetooth_set_sleep(NULL, RFKILL_STATE_UNBLOCKED);

    return rc;
}
コード例 #2
0
static int __init jupiter_btsleep_probe(struct platform_device *pdev)
{
	int rc = 0;

	bt_sleep = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);
	if (!bt_sleep)
		return -ENOMEM;

	bt_sleep->name = "bt_sleep";
	bt_sleep->state = 1;
	bt_sleep->state = RFKILL_STATE_SOFT_BLOCKED;
	/* userspace cannot take exclusive control */
	bt_sleep->user_claim_unsupported = 1;
	bt_sleep->user_claim = 0;
	bt_sleep->data = NULL;  // user data
	bt_sleep->toggle_radio = bluetooth_set_sleep;

	rc = rfkill_register(bt_sleep);
	if (rc)
		rfkill_free(bt_sleep);

	printk(KERN_DEBUG "[BT] rfkill_force_state(bt_sleep, RFKILL_STATE_UNBLOCKED) \n");
	rfkill_force_state(bt_sleep, RFKILL_STATE_UNBLOCKED);

	bluetooth_set_sleep(NULL, RFKILL_STATE_UNBLOCKED);

	return rc;
}
コード例 #3
0
static void bluetooth_update_rfk(void)
{
	int result;

	if (!bluetooth_rfkill)
		return;

	result = bluetooth_get_radiosw();
	if (result < 0)
		return;
	rfkill_force_state(bluetooth_rfkill, result);
}
コード例 #4
0
static int __init jupiter_rfkill_probe(struct platform_device *pdev)
{
	int rc = 0;
	int irq,ret;

	//Initialize wake locks
	wake_lock_init(&rfkill_wake_lock, WAKE_LOCK_SUSPEND, "board-rfkill");
	wake_lock_init(&bt_wake_lock, WAKE_LOCK_SUSPEND, "bt-rfkill");

	//BT Host Wake IRQ
	irq = IRQ_BT_HOST_WAKE;

	set_irq_type(irq, IRQ_TYPE_EDGE_BOTH);
	ret = request_irq(irq, bt_host_wake_irq_handler, 0, "bt_host_wake_irq_handler", NULL);
	if(ret < 0)
		printk(KERN_ERR "[BT] Request_irq failed \n");

	set_irq_type(irq, IRQ_TYPE_EDGE_BOTH);
//	enable_irq(IRQ_EINT(22));

	//RFKILL init - default to bluetooth off
	rfkill_switch_all(RFKILL_TYPE_BLUETOOTH, RFKILL_STATE_SOFT_BLOCKED);

	bt_rfk = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);
	if (!bt_rfk)
		return -ENOMEM;

	bt_rfk->name = bt_name;
	bt_rfk->state = RFKILL_STATE_SOFT_BLOCKED;
	/* userspace cannot take exclusive control */
	bt_rfk->user_claim_unsupported = 1;
	bt_rfk->user_claim = 0;
	bt_rfk->data = NULL;  // user data
	bt_rfk->toggle_radio = bluetooth_set_power;

	printk(KERN_DEBUG "[BT] rfkill_register(bt_rfk) \n");

	rc = rfkill_register(bt_rfk);
	if (rc)
	{
		printk (KERN_ERR "***********ERROR IN REGISTERING THE RFKILL***********\n");
		rfkill_free(bt_rfk);
	}

	bluetooth_set_power(NULL, RFKILL_STATE_SOFT_BLOCKED);
	rfkill_force_state(bt_rfk, RFKILL_STATE_SOFT_BLOCKED);

	return rc;
}
コード例 #5
0
ファイル: rt2x00rfkill.c プロジェクト: kizukukoto/WDN900_GPL
static void rt2x00rfkill_poll(struct work_struct *work)
{
	struct rt2x00_dev *rt2x00dev =
	    container_of(work, struct rt2x00_dev, rfkill_work.work);
	enum rfkill_state state;

	if (!test_bit(RFKILL_STATE_REGISTERED, &rt2x00dev->rfkill_state) ||
	    !test_bit(CONFIG_SUPPORT_HW_BUTTON, &rt2x00dev->flags))
		return;

	/*
	 * Poll latest state and report it to rfkill who should sort
	 * out if the state should be toggled or not.
	 */
	if (!rt2x00rfkill_get_state(rt2x00dev, &state))
		rfkill_force_state(rt2x00dev->rfkill, state);

	queue_delayed_work(rt2x00dev->hw->workqueue,
			   &rt2x00dev->rfkill_work, RFKILL_POLL_INTERVAL);
}
コード例 #6
0
static int __init apollo_rfkill_probe(struct platform_device *pdev)
{
    int ret;

    s5p_config_gpio_alive_table(ARRAY_SIZE(bt_gpio_table), bt_gpio_table);

    /* Host Wake IRQ */
    wake_lock_init(&bt_host_wakelock, WAKE_LOCK_SUSPEND, "bt_host_wake");

    bt_rfkill = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);
    if (!bt_rfkill)
        goto err_rfkill;

    bt_rfkill->name = "bt_rfkill";
    /* userspace cannot take exclusive control */
    bt_rfkill->user_claim_unsupported = 1;
    bt_rfkill->user_claim = 0;
    bt_rfkill->data = pdev;	/* user data */
    bt_rfkill->toggle_radio = bluetooth_set_power;
    /* set bt_rfkill default state to off */
    rfkill_set_default(RFKILL_TYPE_BLUETOOTH, RFKILL_STATE_SOFT_BLOCKED);

    ret = rfkill_register(bt_rfkill);
    if (ret) {
        rfkill_free(bt_rfkill);
        goto err_rfkill;
    }

#ifdef BT_SLEEP_ENABLE
    wake_lock_init(&bt_wakelock, WAKE_LOCK_SUSPEND, "bt_wake");

    bt_sleep = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);
    if (!bt_sleep)
        goto err_sleep;

    bt_sleep->name = "bt_sleep";
    /* userspace cannot take exclusive control */
    bt_sleep->user_claim_unsupported = 1;
    bt_sleep->user_claim = 0;
    bt_sleep->data = NULL;	/* user data */
    bt_sleep->toggle_radio = bluetooth_set_sleep;

    ret = rfkill_register(bt_sleep);
    if (ret) {
        rfkill_free(bt_sleep);
        goto err_sleep;
    }

    /* set bt_sleep default state to wake_unlock */
    rfkill_force_state(bt_sleep, RFKILL_STATE_UNBLOCKED);
#endif /* BT_SLEEP_ENABLE */

    return 0;

err_sleep:
    wake_lock_destroy(&bt_wakelock);
    rfkill_unregister(bt_rfkill);

err_rfkill:
    wake_lock_destroy(&bt_host_wakelock);
    return ret;

}