static int liberty_rfkill_probe(struct platform_device *pdev)
{
	int rc = 0;
	enum rfkill_state default_state = RFKILL_STATE_SOFT_BLOCKED;

	liberty_config_bt_init();	/* bt gpio initial config */

	rfkill_set_default(RFKILL_TYPE_BLUETOOTH, default_state);
	bluetooth_set_power(NULL, default_state);

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

	bt_rfk->name = bt_name;
	bt_rfk->state = default_state;

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

	rc = rfkill_register(bt_rfk);
	if (rc)
		goto err_rfkill_reg;

	return 0;

err_rfkill_reg:
	rfkill_free(bt_rfk);
	return rc;
}
static int legend_rfkill_probe(struct platform_device *pdev)
{
	int rc = 0;
	enum rfkill_state default_state = RFKILL_STATE_SOFT_BLOCKED;  /* off */

	/* force BT on and off to do GPIO setting when initiate */
	bluetooth_set_power(NULL, RFKILL_STATE_UNBLOCKED);
	legend_config_bt_init();	/* bt gpio initial config */

	rfkill_set_default(RFKILL_TYPE_BLUETOOTH, default_state);
	bluetooth_set_power(NULL, default_state);

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

	bt_rfk->name = bt_name;
	bt_rfk->state = default_state;
	/* 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;

	rc = rfkill_register(bt_rfk);

	if (rc)
		rfkill_free(bt_rfk);
	return rc;
}
Esempio n. 3
0
static int bluetooth_power_rfkill_probe(struct platform_device *pdev)
{
	struct rfkill *rfkill;
	int ret;

	/* force Bluetooth off during init to allow for user control */
	ret = rfkill_set_default(RFKILL_TYPE_BLUETOOTH,
				RFKILL_STATE_SOFT_BLOCKED);
	if (ret) {
		printk(KERN_DEBUG
			"%s: rfkill set default failed=%d\n", __func__, ret);
		return ret;
	}

	rfkill = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);

	if (!rfkill) {
		dev_err(&pdev->dev, "rfkill allocate failed\n");
		return -ENOMEM;
	}

	rfkill->name = "bt_power";
	rfkill->toggle_radio = bluetooth_toggle_radio;
	rfkill->data = pdev->dev.platform_data;
	ret = rfkill_register(rfkill);
	if (ret) {
		dev_err(&pdev->dev, "rfkill register failed=%d\n", ret);
		rfkill_free(rfkill);
		return ret;
	}

	platform_set_drvdata(pdev, rfkill);

	return 0;
}
Esempio n. 4
0
static int fxn_rfkill_probe(struct platform_device *pdev)
{
	int rc = 0;
	struct fxn_rfkill_platform_data *pdata = pdev->dev.platform_data;
	enum rfkill_state default_state = RFKILL_STATE_UNBLOCKED;

	//printk(">>> fxn_rfkill_probe\n");
	
	// WiFi
#ifdef CONFIG_RFKILL_WIFI
	if(DBG) printk("<RFKILL_WIFI>\n");
	
	if (pdata->wifi_reset_gpio >= 0) {
        	rfkill_set_default(RFKILL_TYPE_WLAN, RFKILL_STATE_UNBLOCKED);
		
		pdata->rfkill[FXN_WIFI] = rfkill_allocate(&pdev->dev, RFKILL_TYPE_WLAN);
		if (unlikely(!pdata->rfkill[FXN_WIFI]))
		{
			return -ENOMEM;
		}
		
		// printk("  WL_RST_N GPIO %d to HIGH\n", (void *)pdata->wifi_reset_gpio);
		fxn_rfkill_set_power_wifi((void *)pdata->wifi_reset_gpio, RFKILL_STATE_UNBLOCKED);
           
		pdata->rfkill[FXN_WIFI]->name = "fxn_wifi";
		pdata->rfkill[FXN_WIFI]->state = default_state;
		/* userspace cannot take exclusive control */
		pdata->rfkill[FXN_WIFI]->user_claim_unsupported = 1;
		pdata->rfkill[FXN_WIFI]->user_claim = 0;
		pdata->rfkill[FXN_WIFI]->data = (void *)pdata->wifi_reset_gpio;
		pdata->rfkill[FXN_WIFI]->toggle_radio = fxn_rfkill_set_power_wifi;

		rc = rfkill_register(pdata->rfkill[FXN_WIFI]);
		if (unlikely(rc)) {
			rfkill_free(pdata->rfkill[FXN_WIFI]);
			return rc;
		}
	}
//&*&*&*BC1_110513:add the wifi suspend wakelock to avoid wifi or system crash
	wake_lock_init(&wifi_lock, WAKE_LOCK_SUSPEND, "wifi_wake_lock");
//&*&*&*BC2_110513:add the wifi suspend wakelock to avoid wifi or system crash
#endif
	
	// Bluetooth
#ifdef CONFIG_RFKILL_BT
	if(DBG) printk("<RFKILL_BT>\n");
	
	if (pdata->bt_reset_gpio >= 0) {
		rfkill_set_default(RFKILL_TYPE_BLUETOOTH, RFKILL_STATE_SOFT_BLOCKED);
		
		// printk("  BT_RST_N to LOW\n");
		fxn_rfkill_set_power_bt((void *)pdata->bt_reset_gpio, RFKILL_STATE_SOFT_BLOCKED);
		
		pdata->rfkill[FXN_BT] = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);
		if (unlikely(!pdata->rfkill[FXN_BT]))
		{
			return -ENOMEM;
		}
           
		pdata->rfkill[FXN_BT]->name = "fxn_bt";
		pdata->rfkill[FXN_BT]->state = default_state;
		/* userspace cannot take exclusive control */
		pdata->rfkill[FXN_BT]->user_claim_unsupported = 1;
		pdata->rfkill[FXN_BT]->user_claim = 0;
		pdata->rfkill[FXN_BT]->data = (void *)pdata->bt_reset_gpio;
		pdata->rfkill[FXN_BT]->toggle_radio = fxn_rfkill_set_power_bt;

		rc = rfkill_register(pdata->rfkill[FXN_BT]);
		if (unlikely(rc)) {
			rfkill_free(pdata->rfkill[FXN_BT]);
			return rc;
		}
	}
#endif
	
	// GPS
#ifdef CONFIG_RFKILL_GPS
	if(DBG) printk("<RFKILL_GPS>\n");
	
	rc = 0;
	
	if (pdata->gps_pwr_en_gpio >= 0) {
	    rfkill_set_default(RFKILL_TYPE_GPS, RFKILL_STATE_SOFT_BLOCKED);

           // GPS_PWR_EN
           if(DBG) printk("  GPS_PWR_EN to high\n");
           gpio_direction_output(FXN_GPIO_GPS_PWR_EN, 1);
	      udelay(100);
	      
	      // GPS_RST
             if(DBG) printk("  GPS_RST to high\n");
	     gpio_direction_output(FXN_GPIO_GPS_RST, 1);
	     msleep(100);
	     
      	// GPS_ON_OFF
             if(DBG) printk("  GPS_ON_OFF to low\n");
	     gpio_direction_output(FXN_GPIO_GPS_ON_OFF, 0);
	     
		pdata->rfkill[FXN_GPS] = rfkill_allocate(&pdev->dev, RFKILL_TYPE_GPS);
		if (unlikely(!pdata->rfkill[FXN_GPS]))
		{
			return -ENOMEM;
		}
		
	     // set BLOCKED as default
		fxn_rfkill_set_power_gps((void *)pdata->gps_pwr_en_gpio, RFKILL_STATE_SOFT_BLOCKED);
           
		pdata->rfkill[FXN_GPS]->name = "fxn_gps";
		pdata->rfkill[FXN_GPS]->state = default_state;
		/* userspace cannot take exclusive control */
		pdata->rfkill[FXN_GPS]->user_claim_unsupported = 1;
		pdata->rfkill[FXN_GPS]->user_claim = 0;
		pdata->rfkill[FXN_GPS]->data = (void *)pdata->gps_pwr_en_gpio;
		pdata->rfkill[FXN_GPS]->toggle_radio = fxn_rfkill_set_power_gps;

		rc = rfkill_register(pdata->rfkill[FXN_GPS]);
		if (unlikely(rc)) {
			rfkill_free(pdata->rfkill[FXN_GPS]);
			return rc;
		}
	}
#endif
	
	//printk("<<< fxn_rfkill_probe\n");
	return 0;
}
Esempio n. 5
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;

}