Exemplo n.º 1
0
struct rpres *rpres_get(const char *name)
{
	int ret;
	struct rpres *r;
	struct rpres_platform_data *pdata;

	spin_lock(&rpres_lock);
	r = __find_by_name(name);
	spin_unlock(&rpres_lock);
	if (!r)
		return ERR_PTR(-ENOENT);

	omap4_dpll_cascading_blocker_hold(&r->pdev->dev);
	mutex_lock(&r->lock);
	if (r->state == RPRES_ACTIVE) {
		pr_err("%s:resource already active\n", __func__);
		ret = -EINVAL;
		goto out;
	}
	pdata = r->pdev->dev.platform_data;
	ret = pdata->ops->start(r->pdev);
	if (!ret)
		r->state = RPRES_ACTIVE;
out:
	mutex_unlock(&r->lock);
	if (ret)
		return ERR_PTR(ret);
	return r;
}
Exemplo n.º 2
0
int omap_device_scale_gpu(struct device *req_dev, struct device *target_dev,
                          unsigned long rate)
{
    unsigned long freq = 0;

    /* find lowest frequency */
    opp_find_freq_ceil(target_dev, &freq);

    if (rate > freq)
        omap4_dpll_cascading_blocker_hold(target_dev);
    else
        omap4_dpll_cascading_blocker_release(target_dev);

    return omap_device_scale(req_dev, target_dev, rate);
}