示例#1
0
static long misc_modem_ioctl(struct file *file, unsigned int
		cmd, unsigned long arg)
{
    void __user *argp = (void __user *) arg;
    int flag,ret=-1;

    switch (cmd) {
        case VMDM_IOCTL_RESET:
            oem_reset_modem();
            break;
        case VMDM_IOCTL_POWER:
            if (copy_from_user(&flag, argp, sizeof(flag)))
                return -EFAULT;
            if (flag < 0 || flag > 1)
                return -EINVAL;
            if(flag){
                oem_power_on_modem();
            }else{
                oem_power_off_modem();
            }
            break;
	case VMDM_IOCTL_CRL:
		if (copy_from_user(&flag, argp, sizeof(flag)))
				return -EFAULT;
		if (flag < 0 || flag > 1)
			return -EINVAL;
		if(flag){
			ret=modem_on_off_ctrl_chan(1);
		}else{
			ret=modem_on_off_ctrl_chan(0);
		}
		break;
	case VMDM_IOCTL_DIE:
		oem_let_cbp_die();
		break;
	case VMDM_IOCTL_WAKE:
		if (copy_from_user(&flag, argp, sizeof(flag)))
			return -EFAULT;
		if (flag < 0 || flag > 1)
			return -EINVAL;
		if(flag){
            printk("hold on wakelock.\n");
			wake_lock(&vmdata->wlock);
		}else{
            printk("release wakelock.\n");
			wake_unlock(&vmdata->wlock);
		}
		break;
    default:
        break;
			
    }

    return 0;
}
static ssize_t modem_boot_set(struct device *pdev, struct device_attribute *attr, const char *buf, size_t count)
{
    int state;

    hwlog_info("Power PHY set to %s\n", buf);

    if (kstrtoint(buf, 10, &state)) {
        hwlog_err("%s:%d kstrtoint %s fail\n", __func__, __LINE__, buf);
        return -EINVAL;
    }

	switch(state){
		case POWER_SET_DEBUGOFF:
			modem_boot_change_state(state);
			oem_power_off_modem();
			break;
		case POWER_SET_DEBUGON:
			modem_boot_change_state(state);
			oem_power_on_modem();
			break;
		case POWER_SET_OFF:
			modem_boot_change_state(state);
			via_modem_state = MODEM_STATE_OFF;
			via_monitor_uevent_notify(MODEM_STATE_OFF);
			oem_power_off_modem();
			break;
		case POWER_SET_ON:
			modem_boot_change_state(state);
			oem_power_on_modem();
			break;
		case MODEM_CTRL_RESET:
			oem_reset_modem();
			break;
		case MODEM_CTRL_DIE:
			oem_let_cbp_die();
			break;
		case MODEM_CTRL_WAKE_LOCK:
			hwlog_info("hold on wakelock.\n");
			wake_lock(&vmdata->wlock);
			break;
		case MODEM_CTRL_WAKE_LOCK_RELEASE:
			hwlog_info("release wakelock.\n");
			wake_unlock(&vmdata->wlock);
			break;
		default:
			hwlog_info("default: do nothing!\n");
			break;
	}

    return count;
}