Exemple #1
0
static int __init modem_8960_init(void)
{
	int ret;

	if (!cpu_is_msm8960())
		return -ENODEV;

	ret = smsm_state_cb_register(SMSM_MODEM_STATE, SMSM_RESET,
		smsm_state_cb, 0);

	if (ret < 0)
		pr_err("%s: Unable to register SMSM callback! (%d)\n",
				__func__, ret);

	ret = request_irq(Q6FW_WDOG_EXPIRED_IRQ, modem_wdog_bite_irq,
			IRQF_TRIGGER_RISING, "modem_wdog_fw", NULL);

	if (ret < 0) {
		pr_err("%s: Unable to request q6fw watchdog IRQ. (%d)\n",
				__func__, ret);
		goto out;
	}

	ret = request_irq(Q6SW_WDOG_EXPIRED_IRQ, modem_wdog_bite_irq,
			IRQF_TRIGGER_RISING, "modem_wdog_sw", NULL);

	if (ret < 0) {
		pr_err("%s: Unable to request q6sw watchdog IRQ. (%d)\n",
				__func__, ret);
		disable_irq_nosync(Q6FW_WDOG_EXPIRED_IRQ);
		goto out;
	}

	ret = modem_subsystem_restart_init();

	if (ret < 0) {
		pr_err("%s: Unable to reg with subsystem restart. (%d)\n",
				__func__, ret);
		goto out;
	}

	ret = modem_debugfs_init();

	pr_info("%s: 8960 modem fatal driver init'ed.\n", __func__);
out:
	return ret;
}
Exemple #2
0
static int __devinit modemctl_probe(struct platform_device *pdev)
{
    int r = -ENOMEM;
    struct modemctl *mc;
    struct modemctl_data *pdata;
    struct resource *res;

    pdata = pdev->dev.platform_data;

    mc = kzalloc(sizeof(*mc), GFP_KERNEL);
    if (!mc)
        return -ENOMEM;

    init_waitqueue_head(&mc->wq);
    spin_lock_init(&mc->lock);
    mutex_init(&mc->ctl_lock);

    mc->irq_bp = platform_get_irq_byname(pdev, "active");
    mc->irq_mbox = platform_get_irq_byname(pdev, "onedram");

    mc->gpio_phone_active = pdata->gpio_phone_active;
    mc->gpio_pda_active = pdata->gpio_pda_active;
    mc->gpio_cp_reset = pdata->gpio_cp_reset;
    mc->gpio_phone_on = pdata->gpio_phone_on;
    mc->is_cdma_modem = pdata->is_cdma_modem;
    if (pdata->num_pdp_contexts)
        mc->num_pdp_contexts = pdata->num_pdp_contexts;
    else
        mc->num_pdp_contexts = 1;

    res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    if (!res)
        goto err_free;
    mc->mmbase = res->start;
    mc->mmsize = resource_size(res);

    mc->mmio = ioremap_nocache(mc->mmbase, mc->mmsize);
    if (!mc->mmio)
        goto err_free;

    platform_set_drvdata(pdev, mc);

    mc->dev.name = "modem_ctl";
    mc->dev.minor = MISC_DYNAMIC_MINOR;
    mc->dev.fops = &modemctl_fops;
    r = misc_register(&mc->dev);
    if (r)
        goto err_ioremap;

    /* hide control registers from userspace */
    mc->mmsize -= 0x800;
    mc->status = MODEM_OFF;

    wake_lock_init(&mc->ip_tx_wakelock,
                   WAKE_LOCK_SUSPEND, "modem_ip_tx");
    wake_lock_init(&mc->ip_rx_wakelock,
                   WAKE_LOCK_SUSPEND, "modem_ip_rx");

    modem_io_init(mc, mc->mmio);

    r = request_irq(mc->irq_bp, modemctl_bp_irq_handler,
                    IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
                    "modemctl_bp", mc);
    if (r)
        goto err_irq_bp;

    r = request_irq(mc->irq_mbox, modemctl_mbox_irq_handler,
                    IRQF_TRIGGER_LOW, "modemctl_mbox", mc);
    if (r)
        goto err_irq_mbox;

    enable_irq_wake(mc->irq_bp);
    enable_irq_wake(mc->irq_mbox);

    modem_debugfs_init(mc);

    return 0;

err_irq_mbox:
    free_irq(mc->irq_mbox, mc);
err_irq_bp:
    free_irq(mc->irq_bp, mc);
err_ioremap:
    iounmap(mc->mmio);
err_free:
    kfree(mc);
    return r;
}
static int __init modem_8960_init(void)
{
	int ret;

	if (!cpu_is_msm8960() && !cpu_is_msm8930() && !cpu_is_msm9615())
		return -ENODEV;

	ret = smsm_state_cb_register(SMSM_MODEM_STATE, SMSM_RESET,
		smsm_state_cb, 0);

	xo1 = msm_xo_get(MSM_XO_TCXO_A0, "modem-8960");
	if (IS_ERR(xo1)) {
		ret = PTR_ERR(xo1);
		goto out;
	}

	xo2 = msm_xo_get(MSM_XO_TCXO_A1, "modem-8960");
	if (IS_ERR(xo2)) {
		ret = PTR_ERR(xo2);
		goto out;
	}

	if (ret < 0)
		pr_err("%s: Unable to register SMSM callback! (%d)\n",
				__func__, ret);

	ret = request_irq(Q6FW_WDOG_EXPIRED_IRQ, modem_wdog_bite_irq,
			IRQF_TRIGGER_RISING, "modem_wdog_fw", NULL);

	if (ret < 0) {
		pr_err("%s: Unable to request q6fw watchdog IRQ. (%d)\n",
				__func__, ret);
		goto out;
	}

	ret = request_irq(Q6SW_WDOG_EXPIRED_IRQ, modem_wdog_bite_irq,
			IRQF_TRIGGER_RISING, "modem_wdog_sw", NULL);

	if (ret < 0) {
		pr_err("%s: Unable to request q6sw watchdog IRQ. (%d)\n",
				__func__, ret);
		disable_irq_nosync(Q6FW_WDOG_EXPIRED_IRQ);
		goto out;
	}

	ret = modem_subsystem_restart_init();

	if (ret < 0) {
		pr_err("%s: Unable to reg with subsystem restart. (%d)\n",
				__func__, ret);
		goto out;
	}

	modemfw_ramdump_dev = create_ramdump_device("modem_fw");

	if (!modemfw_ramdump_dev) {
		pr_err("%s: Unable to create modem fw ramdump device. (%d)\n",
				__func__, -ENOMEM);
		ret = -ENOMEM;
		goto out;
	}

	modemsw_ramdump_dev = create_ramdump_device("modem_sw");

	if (!modemsw_ramdump_dev) {
		pr_err("%s: Unable to create modem sw ramdump device. (%d)\n",
				__func__, -ENOMEM);
		ret = -ENOMEM;
		goto out;
	}

	smem_ramdump_dev = create_ramdump_device("smem");

	if (!smem_ramdump_dev) {
		pr_err("%s: Unable to create smem ramdump device. (%d)\n",
				__func__, -ENOMEM);
		ret = -ENOMEM;
		goto out;
	}

	modem_coredump_dev = create_modem_coredump_device("modem");

	if (!modem_coredump_dev) {
		pr_err("%s: Unable to create modem coredump device. (%d)\n",
				__func__, -ENOMEM);
		ret = -ENOMEM;
		goto out;
	}

	ret = modem_debugfs_init();

	pr_info("%s: modem fatal driver init'ed.\n", __func__);
out:
	return ret;
}
static int __init modem_8960_init(void)
{
	int ret;

	if (!cpu_is_msm8960() && !cpu_is_msm8930() && !cpu_is_msm8930aa() &&
	    !cpu_is_msm9615() && !cpu_is_msm8627())
		return -ENODEV;

	ret = smsm_state_cb_register(SMSM_MODEM_STATE, SMSM_RESET,
		smsm_state_cb, 0);

	if (ret < 0)
		pr_err("%s: Unable to register SMSM callback! (%d)\n",
				__func__, ret);

	ret = request_irq(Q6FW_WDOG_EXPIRED_IRQ, modem_wdog_bite_irq,
			IRQF_TRIGGER_RISING, "modem_wdog_fw", NULL);

	if (ret < 0) {
		pr_err("%s: Unable to request q6fw watchdog IRQ. (%d)\n",
				__func__, ret);
		goto out;
	}

	ret = request_irq(Q6SW_WDOG_EXPIRED_IRQ, modem_wdog_bite_irq,
			IRQF_TRIGGER_RISING, "modem_wdog_sw", NULL);

	if (ret < 0) {
		pr_err("%s: Unable to request q6sw watchdog IRQ. (%d)\n",
				__func__, ret);
		disable_irq_nosync(Q6FW_WDOG_EXPIRED_IRQ);
		goto out;
	}

	ret = modem_subsystem_restart_init();

	if (ret < 0) {
		pr_err("%s: Unable to reg with subsystem restart. (%d)\n",
				__func__, ret);
		goto out;
	}

	modemfw_ramdump_dev = create_ramdump_device("modem_fw");

	if (!modemfw_ramdump_dev) {
		pr_err("%s: Unable to create modem fw ramdump device. (%d)\n",
				__func__, -ENOMEM);
		ret = -ENOMEM;
		goto out;
	}

	modemsw_ramdump_dev = create_ramdump_device("modem_sw");

	if (!modemsw_ramdump_dev) {
		pr_err("%s: Unable to create modem sw ramdump device. (%d)\n",
				__func__, -ENOMEM);
		ret = -ENOMEM;
		goto out;
	}

#if defined(CONFIG_LGE_HANDLE_PANIC)
	if(smem_ramdump_dev==NULL)
#endif
	smem_ramdump_dev = create_ramdump_device("smem-modem");

	if (!smem_ramdump_dev) {
		pr_err("%s: Unable to create smem ramdump device. (%d)\n",
				__func__, -ENOMEM);
		ret = -ENOMEM;
		goto out;
	}

	ret = modem_debugfs_init();

	pr_info("%s: modem fatal driver init'ed.\n", __func__);
out:
	return ret;
}