コード例 #1
0
int modem_poweron_off(int on_off)
{
	struct rk29_mi700_data *pdata = gpdata;	
	
  	mutex_lock(&pdata->bp_mutex);
	if(on_off)
	{
		MODEMDBG("------------modem_poweron\n");
		gpio_set_value(pdata->bp_reset, GPIO_LOW);
		msleep(100);
		gpio_set_value(pdata->bp_reset, GPIO_HIGH);
		gpio_set_value(pdata->bp_power, GPIO_HIGH);
		msleep(1000);
		gpio_set_value(pdata->bp_power, GPIO_LOW);
		msleep(700);
		gpio_set_value(pdata->bp_power, GPIO_HIGH);
	}
	else
	{
		MODEMDBG("------------modem_poweroff\n");
		gpio_set_value(pdata->bp_power, GPIO_LOW);
		gpio_set_value(pdata->bp_power, GPIO_HIGH);
		msleep(2500);
		gpio_set_value(pdata->bp_power, GPIO_LOW);
	}
  	mutex_unlock(&pdata->bp_mutex);
        return 0;
}
コード例 #2
0
ファイル: mu509.c プロジェクト: AndrewDB/rk3066-kernel
int modem_poweron_off(int on_off)
{
	struct rk29_mu509_data *pdata = gpdata;		
  if(on_off)
  {
		MODEMDBG("------------modem_poweron\n");
		gpio_set_value(pdata->bp_reset, GPIO_HIGH);
		msleep(100);
		gpio_set_value(pdata->bp_reset, GPIO_LOW);
		gpio_set_value(pdata->bp_power, GPIO_LOW);
		msleep(1000);
		gpio_set_value(pdata->bp_power, GPIO_HIGH);
		msleep(700);
		gpio_set_value(pdata->bp_power, GPIO_LOW);
		gpio_set_value(pdata->ap_wakeup_bp, GPIO_LOW);
		gpio_set_value(airplane_mode, GPIO_HIGH);
  }
  else
  {
		MODEMDBG("------------modem_poweroff\n");
		gpio_set_value(pdata->bp_power, GPIO_LOW);
		gpio_set_value(pdata->bp_power, GPIO_HIGH);
		msleep(2500);
		gpio_set_value(pdata->bp_power, GPIO_LOW);
  }
  return 0;
}
コード例 #3
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
static int mtk23d_release(struct inode *inode, struct file *file)
{
	MODEMDBG("mtk23d_release\n");

	//gpio_free(pdata->bp_power);
	return 0;
}
コード例 #4
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
static void ap_wakeup(struct platform_device *pdev)
{
	struct rk2818_23d_data *pdata = pdev->dev.platform_data;
	
	MODEMDBG("ap wakeup!\n");
	gpio_set_value(pdata->ap_statue,GPIO_LOW);
}
コード例 #5
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
static void bpwakeup_work_func_work(struct work_struct *work)
{
	//struct modem_dev *bdata = container_of(work, struct modem_dev, work);
	
	MODEMDBG("%s\n", __FUNCTION__);
	
}
コード例 #6
0
static void ap_wakeup_bp(struct platform_device *pdev, int wake)
{
	struct rk29_mi700_data *pdata = pdev->dev.platform_data;
	MODEMDBG("ap_wakeup_bp\n");

	gpio_set_value(pdata->ap_wakeup_bp, wake);  

}
コード例 #7
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
static void ap_wakeup_bp(struct platform_device *pdev, int wake)//low to wakeup bp
{
	struct rk2818_23d_data *pdata = pdev->dev.platform_data;
        //struct modem_dev *mt6223d_data = platform_get_drvdata(pdev);
	MODEMDBG("ap_wakeup_bp\n");

	gpio_set_value(pdata->ap_bp_wakeup, wake);  // phc
	//gpio_set_value(RK2818_PIN_PF5, wake);
}
コード例 #8
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
static int mtk23d_open(struct inode *inode, struct file *file)
{
	struct rk2818_23d_data *pdata = gpdata;
	MODEMDBG("modem_open\n");

	if(power_on)
	{
		power_on = 0;
		modem_poweron_off(1);
	}
	device_init_wakeup(pdata->dev, 1);
	return 0;
}
コード例 #9
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
static irqreturn_t BBwakeup_isr(int irq, void *dev_id)
{
	//struct rk2818_23d_data *pdata = dev_id;
	
	MODEMDBG("%s \n", __FUNCTION__);
	//if(irq != gpio_to_irq(RK29_PIN1_PC0))
	//{
	//		printk("irq != gpio_to_irq(RK29_PIN1_PC0) \n");
	//		return IRQ_NONE;
	//}
	
//	disable_irq_wake(irq);
	
	if(bpstatus_irq_enable == true)
	{
		MODEMDBG("mtk23d_wakelock 3s \n");
		wake_lock_timeout(&mtk23d_wakelock, 3 * HZ);
	}
		

	return IRQ_HANDLED;
}
コード例 #10
0
ファイル: sew868.c プロジェクト: avila-devlogic/D33_KK_Kernel
static int sew868_probe(struct platform_device *pdev)
{
	struct rk30_sew868_data *pdata = gpdata = pdev->dev.platform_data;
	struct modem_dev *sew868_data = NULL;
	int result, irq = 0;	
	
	if(pdata->io_init)
		pdata->io_init();

	modem_poweron_off(1);
	sew868_data = kzalloc(sizeof(struct modem_dev), GFP_KERNEL);
	if(sew868_data == NULL)
	{
		printk("failed to request sew868_data\n");
		goto err1;
	}
	platform_set_drvdata(pdev, sew868_data);
	
	irq = gpio_to_irq(pdata->bp_wakeup_ap);
	if(irq < 0)
	{
		gpio_free(pdata->bp_wakeup_ap);
		printk("failed to request bp_wakeup_ap\n");
	}

	wake_lock_init(&modem_wakelock, WAKE_LOCK_SUSPEND, "bp_wakeup_ap");
	gpio_direction_input(pdata->bp_wakeup_ap);
    	gpio_pull_updown(pdata->bp_wakeup_ap, GPIONormal);	
	result = request_irq(irq, detect_irq_handler, IRQ_BB_WAKEUP_AP_TRIGGER, "bp_wakeup_ap", NULL);
	if (result < 0) {
		printk("%s: request_irq(%d) failed\n", __func__, irq);
		gpio_free(pdata->bp_wakeup_ap);
		goto err0;
	}
	enable_irq_wake(gpio_to_irq(pdata->bp_wakeup_ap)); 
	result = misc_register(&sew868_misc);
	if(result)
	{
		MODEMDBG("misc_register err\n");
	}	

	return result;
err0:
	cancel_work_sync(&sew868_data->work);
err1:
	kfree(sew868_data);
	return 0;
}
コード例 #11
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
void mtk23d_shutdown(struct platform_device *pdev)
{
	struct rk2818_23d_data *pdata = pdev->dev.platform_data;
	struct modem_dev *mt6223d_data = platform_get_drvdata(pdev);
	
	MODEMDBG("%s \n", __FUNCTION__);

	modem_poweron_off(0);  // power down

	cancel_work_sync(&mt6223d_data->work);
	gpio_free(pdata->bp_ap_wakeup);
	gpio_free(pdata->bp_power);
	gpio_free(pdata->bp_reset);
	gpio_free(pdata->ap_bp_wakeup);
	gpio_free(pdata->ap_statue);
	gpio_free(pdata->bp_statue);
	kfree(mt6223d_data);
}
コード例 #12
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
int mtk23d_resume(struct platform_device *pdev)
{
	struct rk2818_23d_data *pdata = pdev->dev.platform_data;
	int irq = 0;
	
	MODEMDBG("%s \n", __FUNCTION__);
	
	irq = gpio_to_irq(pdata->bp_statue);
	if(irq)
	{
		printk("disable pdata->bp_statue irq_wake!! \n");
		bpstatus_irq_enable = false;
		disable_irq_wake(irq);
	}
	
	ap_wakeup(pdev);
	ap_wakeup_bp(pdev, 1);
	
	return 0;
}
コード例 #13
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
int mtk23d_suspend(struct platform_device *pdev, pm_message_t state)
{
	int irq;
	struct rk2818_23d_data *pdata = pdev->dev.platform_data;
	
	MODEMDBG("%s \n", __FUNCTION__);
	
	//enable_irq_wake(irq);
	ap_sleep(pdev);
	ap_wakeup_bp(pdev, 0);

	irq = gpio_to_irq(pdata->bp_statue);
	if (irq < 0) {
		printk("can't get pdata->bp_statue irq \n");
	}
	else
	{
		printk("enable pdata->bp_statue irq_wake!! \n");
		bpstatus_irq_enable = true;
		enable_irq_wake(irq);
	}
	
	return 0;
}
コード例 #14
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
static int mtk23d_probe(struct platform_device *pdev)
{
	struct rk2818_23d_data *pdata = gpdata = pdev->dev.platform_data;
	struct modem_dev *mt6223d_data = NULL;
	int result=1;	
	
	MODEMDBG("mtk23d_probe\n");

	//pdata->io_init();
	pdata->dev = &pdev->dev;

	mt6223d_data = kzalloc(sizeof(struct modem_dev), GFP_KERNEL);
	if(NULL == mt6223d_data)
	{
		printk("failed to request mt6223d_data\n");
		goto err6;
	}
	platform_set_drvdata(pdev, mt6223d_data);

	result = gpio_request(pdata->bp_statue, "mtk23d");
	if (result) {
		printk("failed to request BP_STATUS gpio\n");
		goto err5;
	}
	
	result = gpio_request(pdata->ap_statue, "mtk23d");
	if (result) {
		printk("failed to request AP_STATUS gpio\n");
		goto err4;
	}	
	
	result = gpio_request(pdata->ap_bp_wakeup, "mtk23d");
	if (result) {
		printk("failed to request AP_BP_WAKEUP gpio\n");
		goto err3;
	}	
	result = gpio_request(pdata->bp_reset, "mtk23d");
	if (result) {
		printk("failed to request BP_RESET gpio\n");
		goto err2;
	}		
	result = gpio_request(pdata->bp_power, "mtk23d");
	if (result) {
		printk("failed to request BP_POW_EN gpio\n");
		goto err1;
	}
	
	if(pdata->bp_ap_wakeup) // SDK板中,该口没有引出
	{
		result = gpio_request(pdata->bp_ap_wakeup, "mtk23d");
		if (result) {
			printk("failed to request BP_AP_WAKEUP gpio\n");
			goto err0;
		}		
	}
	
#if 1 // GPIO初始化,并且防止漏电
	rk29_uart_to_gpio(0);

	/***power off 23d***/
	gpio_direction_output(pdata->bp_power, pdata->bp_power_active_low? GPIO_LOW:GPIO_HIGH);
	
	gpio_direction_output(pdata->ap_statue, GPIO_LOW);
	gpio_direction_output(pdata->ap_bp_wakeup, GPIO_LOW);   
	//gpio_direction_output(pdata->bp_statue,GPIO_LOW);
	gpio_direction_input(pdata->bp_statue);
	if(pdata->bp_ap_wakeup) // SDK板中,该口没有引出
	{
		//gpio_direction_output(pdata->bp_ap_wakeup,GPIO_LOW);
		gpio_direction_input(pdata->bp_ap_wakeup);
	}

	/*复位BP*/
	gpio_set_value(pdata->bp_reset, pdata->bp_reset_active_low? GPIO_LOW:GPIO_HIGH);
	//mdelay(200);
	//gpio_set_value(pdata->bp_reset, pdata->bp_reset_active_low? GPIO_HIGH:GPIO_LOW);
#endif	

	INIT_WORK(&mt6223d_data->work, bpwakeup_work_func_work);
	sema_init(&pdata->power_sem,1);
  	power_on = 1;
	result = misc_register(&mtk23d_misc);
	if(result)
	{
		MODEMDBG("misc_register err\n");
	}
	MODEMDBG("mtk23d_probe ok\n");
	
	return result;
err0:
	cancel_work_sync(&mt6223d_data->work);
	gpio_free(pdata->bp_ap_wakeup);
err1:
	gpio_free(pdata->bp_power);
err2:
	gpio_free(pdata->bp_reset);
err3:
	gpio_free(pdata->ap_bp_wakeup);
err4:
	gpio_free(pdata->ap_statue);
err5:
	gpio_free(pdata->bp_statue);
err6:
	kfree(mt6223d_data);

	return result;
}
コード例 #15
0
static void do_wakeup(struct work_struct *work)
{
    MODEMDBG("%s[%d]: %s\n", __FILE__, __LINE__, __FUNCTION__);
    //rk28_send_wakeup_key();
}
コード例 #16
0
static int mi700_release(struct inode *inode, struct file *file)
{
	MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
	//modem_poweron_off(0);
	return 0;
}
コード例 #17
0
ファイル: mtk23d.c プロジェクト: AndrewDB/rk3066-kernel
static void __exit mtk23d_exit(void)
{
	MODEMDBG("mtk23d_exit\n");
	platform_driver_unregister(&mtk23d_driver);
}
コード例 #18
0
static int mw100_probe(struct platform_device *pdev)
{
	struct rk29_mw100_data *pdata = gpdata = pdev->dev.platform_data;
	struct modem_dev *mw100_data = NULL;
	int result, irq = 0;	

	gpio_request(pdata->bp_power,"bp_power");
	gpio_request(pdata->bp_reset,"bp_reset");
	gpio_request(pdata->bp_wakeup_ap,"bp_wakeup_ap");
	gpio_request(pdata->ap_wakeup_bp,"ap_wakeup_bp");
	gpio_set_value(pdata->modem_power_en, GPIO_HIGH);
	msleep(1000);
	gpio_direction_output(pdata->bp_reset,GPIO_LOW);
	mdelay(120);
	gpio_set_value(pdata->bp_reset, GPIO_HIGH);
	
	gpio_set_value(pdata->ap_wakeup_bp, GPIO_HIGH);
	gpio_direction_output(pdata->ap_wakeup_bp,GPIO_HIGH);	
	
	gpio_set_value(pdata->bp_power, GPIO_HIGH);
	gpio_direction_output(pdata->bp_power,GPIO_HIGH);	
	mdelay(120);
	gpio_set_value(pdata->bp_power, GPIO_LOW);
	gpio_direction_output(pdata->bp_power,GPIO_LOW);	
	
	mw100_data = kzalloc(sizeof(struct modem_dev), GFP_KERNEL);
	if(mw100_data == NULL){
		printk("failed to request mw100_data\n");
		goto err2;
	}
	platform_set_drvdata(pdev, mw100_data);	
	
	gpio_direction_input(pdata->bp_wakeup_ap);
	irq	= gpio_to_irq(pdata->bp_wakeup_ap);
	if(irq < 0){
		gpio_free(pdata->bp_wakeup_ap);
		printk("failed to request bp_wakeup_ap\n");
	}
	
	bp_wakeup_ap_irq = irq;
	
	result = request_irq(irq, detect_irq_handler, IRQ_BB_WAKEUP_AP_TRIGGER, "bp_wakeup_ap", NULL);
	if (result < 0) {
		printk("%s: request_irq(%d) failed\n", __func__, irq);
		gpio_free(pdata->bp_wakeup_ap);
		goto err0;
	}

	enable_irq_wake(bp_wakeup_ap_irq); 

	wake_lock_init(&bp_wakelock, WAKE_LOCK_SUSPEND, "bp_resume");

	result = misc_register(&mw100_misc);
	if(result){
		MODEMDBG("misc_register err\n");
	}	
	return result;
err0:
	gpio_free(pdata->bp_wakeup_ap);
err2:
	kfree(mw100_data);
	return 0;
}