Esempio n. 1
0
static void dummy_codec_device_init(void)
{
#ifdef CONFIG_USE_OF
	int ret;
	struct pinctrl_state *s;
	p = pinctrl_get(dummy_codec_dev);

	if (IS_ERR(p))
		return;
			
	s = pinctrl_lookup_state(p, "dummy_codec_audio");
	if (IS_ERR(s)) {
		pinctrl_put(p);
		return;
	}
		
	ret = pinctrl_select_state(p, s);
	if (ret < 0) {
		pinctrl_put(p);
		return;
	}
	printk("=%s==,dummy_codec_audio init done\n",__func__);
#else
    /* audio pinmux */
//    pinmux_set(&rt5631_pinmux_set);

    /* GPIOA_19 PULL_UP_REG0 bit19 */
//    aml_set_reg32_bits(P_PAD_PULL_UP_REG0, 1, 19, 1);
#endif
}
/******************pin ctrl*****************/
int pinctrl_cmds_tx(struct platform_device *pdev, struct pinctrl_cmd_desc *cmds, int cnt)
{
    int ret = 0;

    int i = 0;
    struct pinctrl_cmd_desc *cm = NULL;

    cm = cmds;

    for(i = 0; i < cnt; i++) {
        if(cm == NULL) {
            balongfb_loge("command %d is null!\n", i);
            continue;
        }

        if(cm->dtype == DTYPE_PINCTRL_GET) {
            cm->pctrl_data->p = pinctrl_get(&pdev->dev);
        } else if(cm->dtype == DTYPE_PINCTRL_STATE_GET) {
            /* check pinctrl pointer*/
            // TO BE DONE
            if(cm ->mode == DTYPE_PINCTRL_STATE_DEFAULT) {
                cm->pctrl_data->pinctrl_def = pinctrl_lookup_state(cm->pctrl_data->p,PINCTRL_STATE_DEFAULT);
            } else if(cm ->mode == DTYPE_PINCTRL_STATE_IDLE) {
                cm->pctrl_data->pinctrl_idle = pinctrl_lookup_state(cm->pctrl_data->p,PINCTRL_STATE_IDLE);
            } else {
                ret = -1;
                balongfb_loge("unknown pinctrl type to get!\n");
                goto err;
            }
        } else if(cm->dtype == DTYPE_PINCTRL_SET) {
            /* check pinctrl pointer*/
            // TO BE DONE
            if(cm ->mode == DTYPE_PINCTRL_STATE_DEFAULT) {
                /* check pinctrl_def pointer*/
                // TO BE DONE
                ret = pinctrl_select_state(cm->pctrl_data->p, cm->pctrl_data->pinctrl_def);
                if(ret) {
                    balongfb_loge("could not set this pin to default state!\n");
                    ret = -1;
                    goto err;
                }

            } else if(cm ->mode == DTYPE_PINCTRL_STATE_IDLE) {
                /* check pinctrl_def pointer*/
                // TO BE DONE
                ret = pinctrl_select_state(cm->pctrl_data->p, cm->pctrl_data->pinctrl_idle);
                if(ret) {
                    balongfb_loge("could not set this pin to idle state!\n");
                    ret = -1;
                    goto err;
                }
            } else {
                ret = -1;
                balongfb_loge("unknown pinctrl type to set!\n");
                goto err;
            }
        } else if(cm->dtype == DTYPE_PINCTRL_PUT) {
            pinctrl_put(cm->pctrl_data->p);
        } else {
            balongfb_loge("not supported command type!\n");
            ret = -1;
            goto err;
        }

        cm++;

    }

    return ret;

err:
    return ret;
}
int ux500_msp_i2s_init_msp(struct platform_device *pdev,
			struct ux500_msp **msp_p,
			struct msp_i2s_platform_data *platform_data)
{
	struct resource *res = NULL;
	struct i2s_controller *i2s_cont;
	struct device_node *np = pdev->dev.of_node;
	struct ux500_msp *msp;

	*msp_p = devm_kzalloc(&pdev->dev, sizeof(struct ux500_msp), GFP_KERNEL);
	msp = *msp_p;
	if (!msp)
		return -ENOMEM;

	if (np) {
		if (!platform_data) {
			platform_data = devm_kzalloc(&pdev->dev,
				sizeof(struct msp_i2s_platform_data), GFP_KERNEL);
			if (!platform_data)
				return -ENOMEM;
		}
	} else
		if (!platform_data)
			return -EINVAL;

	dev_dbg(&pdev->dev, "%s: Enter (name: %s, id: %d).\n", __func__,
		pdev->name, platform_data->id);

	msp->id = platform_data->id;
	msp->dev = &pdev->dev;
	msp->dma_cfg_rx = platform_data->msp_i2s_dma_rx;
	msp->dma_cfg_tx = platform_data->msp_i2s_dma_tx;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (res == NULL) {
		dev_err(&pdev->dev, "%s: ERROR: Unable to get resource!\n",
			__func__);
		return -ENOMEM;
	}

	msp->registers = devm_ioremap(&pdev->dev, res->start,
				      resource_size(res));
	if (msp->registers == NULL) {
		dev_err(&pdev->dev, "%s: ERROR: ioremap failed!\n", __func__);
		return -ENOMEM;
	}

	msp->msp_state = MSP_STATE_IDLE;
	msp->loopback_enable = 0;

	/* I2S-controller is allocated and added in I2S controller class. */
	i2s_cont = devm_kzalloc(&pdev->dev, sizeof(*i2s_cont), GFP_KERNEL);
	if (!i2s_cont) {
		dev_err(&pdev->dev,
			"%s: ERROR: Failed to allocate I2S-controller!\n",
			__func__);
		return -ENOMEM;
	}
	i2s_cont->dev.parent = &pdev->dev;
	i2s_cont->data = (void *)msp;
	i2s_cont->id = (s16)msp->id;
	snprintf(i2s_cont->name, sizeof(i2s_cont->name), "ux500-msp-i2s.%04x",
		msp->id);
	dev_dbg(&pdev->dev, "I2S device-name: '%s'\n", i2s_cont->name);
	msp->i2s_cont = i2s_cont;

	msp->pinctrl_p = pinctrl_get(msp->dev);
	if (IS_ERR(msp->pinctrl_p))
		dev_err(&pdev->dev, "could not get MSP pinctrl\n");
	else {
		msp->pinctrl_def = pinctrl_lookup_state(msp->pinctrl_p,
						PINCTRL_STATE_DEFAULT);
		if (IS_ERR(msp->pinctrl_def)) {
			dev_err(&pdev->dev,
				"could not get MSP defstate (%li)\n",
				PTR_ERR(msp->pinctrl_def));
		}
		msp->pinctrl_sleep = pinctrl_lookup_state(msp->pinctrl_p,
						PINCTRL_STATE_SLEEP);
		if (IS_ERR(msp->pinctrl_sleep))
			dev_err(&pdev->dev,
				"could not get MSP idlestate (%li)\n",
				PTR_ERR(msp->pinctrl_def));
	}

	return 0;
}