您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ twl6040_reg_read函数代码示例

51自学网 2021-06-03 09:01:41
  C++
这篇教程C++ twl6040_reg_read函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中twl6040_reg_read函数的典型用法代码示例。如果您正苦于以下问题:C++ twl6040_reg_read函数的具体用法?C++ twl6040_reg_read怎么用?C++ twl6040_reg_read使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了twl6040_reg_read函数的25个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: twl6040_naudint_handler

static irqreturn_t twl6040_naudint_handler(int irq, void *data){	struct twl6040 *twl6040 = data;	u8 intid, status;	intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);	if (intid & TWL6040_READYINT)		complete(&twl6040->ready);	if (intid & TWL6040_THINT) {		status = twl6040_reg_read(twl6040, TWL6040_REG_STATUS);		if (status & TWL6040_TSHUTDET) {			dev_warn(&twl6040_dev->dev,				 "Thermal shutdown, powering-off");			twl6040_power(twl6040, 0);		} else {			dev_warn(&twl6040_dev->dev,				 "Leaving thermal shutdown, powering-on");			twl6040_power(twl6040, 1);		}	}	return IRQ_HANDLED;}
开发者ID:CSCLOG,项目名称:beaglebone,代码行数:25,


示例2: twl6040_power_down_manual

/* twl6040 manual power-down sequence */static void twl6040_power_down_manual(struct twl6040 *twl6040){	u8 ncpctl, ldoctl, lppllctl;	ncpctl = twl6040_reg_read(twl6040, TWL6040_REG_NCPCTL);	ldoctl = twl6040_reg_read(twl6040, TWL6040_REG_LDOCTL);	lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL);	/* enable internal oscillator */	ldoctl |= TWL6040_OSCENA;	twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	usleep_range(1000, 1500);	/* disable low-power PLL */	lppllctl &= ~TWL6040_LPLLENA;	twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);	/* disable low-side LDO */	ldoctl &= ~TWL6040_LSLDOENA;	twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	/* disable negative charge pump */	ncpctl &= ~TWL6040_NCPENA;	twl6040_reg_write(twl6040, TWL6040_REG_NCPCTL, ncpctl);	/* disable high-side LDO, reference system and internal oscillator */	ldoctl &= ~(TWL6040_HSLDOENA | TWL6040_REFENA | TWL6040_OSCENA);	twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);}
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:30,


示例3: vibra_disable

static void vibra_disable(struct vibra_info *info){	struct twl6040_codec *twl6040 = info->twl6040;	u8 reg;	reg = twl6040_reg_read(twl6040, TWL6040_REG_VIBCTLL)		& ~TWL6040_VIBENAL;	twl6040_reg_write(twl6040, TWL6040_REG_VIBCTLL, reg);	reg = twl6040_reg_read(twl6040, TWL6040_REG_VIBCTLR)		& ~TWL6040_VIBENAR;	twl6040_reg_write(twl6040, TWL6040_REG_VIBCTLR, reg);	info->enabled = false;}
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:15,


示例4: vibra_enable

static void vibra_enable(struct vibra_info *info){	struct twl6040_codec *twl6040 = info->twl6040;	u8 lppllctl, hppllctl;	u8 reg;	reg = twl6040_reg_read(twl6040, TWL6040_REG_VIBCTLL);	twl6040_reg_write(twl6040, TWL6040_REG_VIBCTLL,			  reg | TWL6040_VIBENAL | TWL6040_VIBCTRLLP);	reg = twl6040_reg_read(twl6040, TWL6040_REG_VIBCTLR);	twl6040_reg_write(twl6040, TWL6040_REG_VIBCTLR,			  reg | TWL6040_VIBENAR | TWL6040_VIBCTRLRN);	info->enabled = true;}
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:16,


示例5: twl6040_r_val

static ssize_t twl6040_r_val(struct device *dev, struct device_attribute *attr, char *buf){	int rtval = 0;	 rtval = twl6040_reg_read(codec_twl6040, g_twl6040_reg);        printk("0x");	return sprintf(buf, "%.2x/n",  rtval);}
开发者ID:panhenry,项目名称:MyTest,代码行数:7,


示例6: twl6040_prt

static ssize_t twl6040_prt(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){	int i;	for(i=1; i <= 46; i++)		printk("0x%x	0x%x/n", i, twl6040_reg_read(codec_twl6040, i));	return 0;}
开发者ID:panhenry,项目名称:MyTest,代码行数:8,


示例7: twl6040gpo_get

static int twl6040gpo_get(struct gpio_chip *chip, unsigned offset){	struct twl6040 *twl6040 = dev_get_drvdata(chip->dev->parent);	int ret = 0;	ret = twl6040_reg_read(twl6040, TWL6040_REG_GPOCTL);	if (ret < 0)		return ret;	return (ret >> offset) & 1;}
开发者ID:0x000000FF,项目名称:edison-linux,代码行数:11,


示例8: twl6040_naudint_handler

static irqreturn_t twl6040_naudint_handler(int irq, void *data){	struct twl6040_codec *twl6040 = data;	u8 intid;	intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);	if (intid & TWL6040_READYINT)		complete(&twl6040->ready);	return IRQ_HANDLED;}
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:12,


示例9: twl6040_read_reg_volatile

/* * read from twl6040 hardware register */static int twl6040_read_reg_volatile(struct snd_soc_codec *codec,			unsigned int reg){	struct twl6040_codec *twl6040 = codec->control_data;	u8 value = 0;	if (reg >= TWL6040_CACHEREGNUM)		return -EIO;	value = twl6040_reg_read(twl6040, reg);	twl6040_write_reg_cache(codec, reg, value);	return value;}
开发者ID:panhenry,项目名称:MyTest,代码行数:17,


示例10: vib_set

static void vib_set(int on){	struct twl6040_codec *twl6040 = misc_data->twl6040;	u8 reg = 0;	if (on) {		reg = twl6040_reg_read(twl6040, TWL6040_REG_VIBCTLL);		twl6040_reg_write(twl6040, TWL6040_REG_VIBCTLL,				  reg | TWL6040_VIBENAL | TWL6040_VIBCTRLLP);		reg = twl6040_reg_read(twl6040, TWL6040_REG_VIBCTLR);		twl6040_reg_write(twl6040, TWL6040_REG_VIBCTLR,				  reg | TWL6040_VIBENAR | TWL6040_VIBCTRLRN);	} else {		reg = twl6040_reg_read(twl6040, TWL6040_REG_VIBCTLL)			& ~TWL6040_VIBENAL;		twl6040_reg_write(twl6040, TWL6040_REG_VIBCTLL, reg);		reg = twl6040_reg_read(twl6040, TWL6040_REG_VIBCTLR)			& ~TWL6040_VIBENAR;		twl6040_reg_write(twl6040, TWL6040_REG_VIBCTLR, reg);	}}
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:24,


示例11: twl6040_thint_handler

static irqreturn_t twl6040_thint_handler(int irq, void *data){	struct twl6040 *twl6040 = data;	u8 status;	status = twl6040_reg_read(twl6040, TWL6040_REG_STATUS);	if (status & TWL6040_TSHUTDET) {		dev_warn(twl6040->dev, "Thermal shutdown, powering-off");		twl6040_power(twl6040, 0);	} else {		dev_warn(twl6040->dev, "Leaving thermal shutdown, powering-on");		twl6040_power(twl6040, 1);	}	return IRQ_HANDLED;}
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:16,


示例12: twl6040_audio_handler

static irqreturn_t twl6040_audio_handler(int irq, void *data){	struct snd_soc_codec *codec = data;	struct twl6040_codec *twl6040 = codec->control_data;	struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);	u8 intid = 0;	intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);	if ((intid & TWL6040_PLUGINT) || (intid & TWL6040_UNPLUGINT)) {		wake_lock_timeout(&priv->wake_lock, 2 * HZ);		queue_delayed_work(priv->workqueue, &priv->delayed_work,				   msecs_to_jiffies(200));	}	return IRQ_HANDLED;}
开发者ID:panhenry,项目名称:MyTest,代码行数:17,


示例13: twl6040_naudint_handler

static irqreturn_t twl6040_naudint_handler(int irq, void *data){	struct twl6040 *twl6040 = data;	u8 intid;	intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);	/*Reason: The probability that TI TWL6040 	          Codec Powerup fail is high. */	if (intid & TWL6040_READYINT)	{		TWL6040_PRINTK("[READY]/n");		complete(&twl6040->ready);  }	return IRQ_HANDLED;}
开发者ID:manusreload,项目名称:android_kernel_huawei_omap4,代码行数:17,


示例14: twl6040gpo_set

static void twl6040gpo_set(struct gpio_chip *chip, unsigned offset, int value){	struct twl6040 *twl6040 = dev_get_drvdata(chip->dev->parent);	int ret;	u8 gpoctl;	ret = twl6040_reg_read(twl6040, TWL6040_REG_GPOCTL);	if (ret < 0)		return;	if (value)		gpoctl = ret | (1 << offset);	else		gpoctl = ret & ~(1 << offset);	twl6040_reg_write(twl6040, TWL6040_REG_GPOCTL, gpoctl);}
开发者ID:0x000000FF,项目名称:edison-linux,代码行数:17,


示例15: twl6040_power_up_completion

static int twl6040_power_up_completion(struct twl6040_codec *twl6040,				       int naudint){	int time_left;	u8 intid;	time_left = wait_for_completion_timeout(&twl6040->ready,						msecs_to_jiffies(144));	if (!time_left) {		intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);		if (!(intid & TWL6040_READYINT)) {			dev_err(&twl6040_codec_dev->dev,				"timeout waiting for READYINT/n");			return -ETIMEDOUT;		}	}	return 0;}
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:19,


示例16: twl6040_vib_irq_handler

static irqreturn_t twl6040_vib_irq_handler(int irq, void *data){	struct vibra_info *info = data;	struct twl6040 *twl6040 = info->twl6040;	u8 status;	status = twl6040_reg_read(twl6040, TWL6040_REG_STATUS);	if (status & TWL6040_VIBLOCDET) {		dev_warn(info->dev, "Left Vibrator overcurrent detected/n");		twl6040_clear_bits(twl6040, TWL6040_REG_VIBCTLL,				   TWL6040_VIBENA);	}	if (status & TWL6040_VIBROCDET) {		dev_warn(info->dev, "Right Vibrator overcurrent detected/n");		twl6040_clear_bits(twl6040, TWL6040_REG_VIBCTLR,				   TWL6040_VIBENA);	}	return IRQ_HANDLED;}
开发者ID:168519,项目名称:linux,代码行数:20,


示例17: twl6040_power_up_automatic

static int twl6040_power_up_automatic(struct twl6040 *twl6040){	int time_left;	gpio_set_value(twl6040->audpwron, 1);	time_left = wait_for_completion_timeout(&twl6040->ready,						msecs_to_jiffies(144));	if (!time_left) {		u8 intid;		dev_warn(twl6040->dev, "timeout waiting for READYINT/n");		intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);		if (!(intid & TWL6040_READYINT)) {			dev_err(twl6040->dev, "automatic power-up failed/n");			gpio_set_value(twl6040->audpwron, 0);			return -ETIMEDOUT;		}	}	return 0;}
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:22,


示例18: twl6040_set_pll

int twl6040_set_pll(struct twl6040_codec *twl6040, enum twl6040_pll_id id,		    unsigned int freq_in, unsigned int freq_out){	u8 hppllctl, lppllctl;	int ret = 0;	mutex_lock(&twl6040->mutex);	hppllctl = twl6040_reg_read(twl6040, TWL6040_REG_HPPLLCTL);	lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL);	switch (id) {	case TWL6040_LPPLL_ID:		/* lppll divider */		switch (freq_out) {		case 17640000:			lppllctl |= TWL6040_LPLLFIN;			break;		case 19200000:			lppllctl &= ~TWL6040_LPLLFIN;			break;		default:			dev_err(&twl6040_codec_dev->dev,				"freq_out %d not supported/n", freq_out);			ret = -EINVAL;			goto pll_out;		}		twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);		switch (freq_in) {		case 32768:			lppllctl |= TWL6040_LPLLENA;			twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL,					  lppllctl);			mdelay(5);			lppllctl &= ~TWL6040_HPLLSEL;			twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL,					  lppllctl);			hppllctl &= ~TWL6040_HPLLENA;			twl6040_reg_write(twl6040, TWL6040_REG_HPPLLCTL,					  hppllctl);			break;		default:			dev_err(&twl6040_codec_dev->dev,				"freq_in %d not supported/n", freq_in);			ret = -EINVAL;			goto pll_out;		}		twl6040->pll = TWL6040_LPPLL_ID;		break;	case TWL6040_HPPLL_ID:		/* high-performance pll can provide only 19.2 MHz */		if (freq_out != 19200000) {			dev_err(&twl6040_codec_dev->dev,				"freq_out %d not supported/n", freq_out);			ret = -EINVAL;			goto pll_out;		}		hppllctl &= ~TWL6040_MCLK_MSK;		switch (freq_in) {		case 12000000:			/* mclk input, pll enabled */			hppllctl |= TWL6040_MCLK_12000KHZ |				    TWL6040_HPLLSQRBP |				    TWL6040_HPLLENA;			break;		case 19200000:			/* mclk input, pll disabled */			hppllctl |= TWL6040_MCLK_19200KHZ |				    TWL6040_HPLLSQRENA |				    TWL6040_HPLLBP;			break;		case 26000000:			/* mclk input, pll enabled */			hppllctl |= TWL6040_MCLK_26000KHZ |				    TWL6040_HPLLSQRBP |				    TWL6040_HPLLENA;			break;		case 38400000:			/* clk slicer, pll disabled */			hppllctl |= TWL6040_MCLK_38400KHZ |				    TWL6040_HPLLSQRENA |				    TWL6040_HPLLBP;			break;		default:			dev_err(&twl6040_codec_dev->dev,				"freq_in %d not supported/n", freq_in);			ret = -EINVAL;			goto pll_out;		}		twl6040_reg_write(twl6040, TWL6040_REG_HPPLLCTL, hppllctl);		udelay(500);		lppllctl |= TWL6040_HPLLSEL;		twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);		lppllctl &= ~TWL6040_LPLLENA;		twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);//.........这里部分代码省略.........
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:101,


示例19: twl6040_probe

static int __devinit twl6040_probe(struct platform_device *pdev){	struct twl4030_audio_data *pdata = pdev->dev.platform_data;	struct twl6040 *twl6040;	struct mfd_cell *cell = NULL;	int ret, children = 0;	if (!pdata) {		dev_err(&pdev->dev, "Platform data is missing/n");		return -EINVAL;	}	/* In order to operate correctly we need valid interrupt config */	if (!pdata->naudint_irq || !pdata->irq_base) {		dev_err(&pdev->dev, "Invalid IRQ configuration/n");		return -EINVAL;	}	twl6040 = kzalloc(sizeof(struct twl6040), GFP_KERNEL);	if (!twl6040)		return -ENOMEM;	platform_set_drvdata(pdev, twl6040);	twl6040_dev = pdev;	twl6040->dev = &pdev->dev;	twl6040->audpwron = pdata->audpwron_gpio;	twl6040->irq = pdata->naudint_irq;	twl6040->irq_base = pdata->irq_base;	mutex_init(&twl6040->mutex);	mutex_init(&twl6040->io_mutex);	init_completion(&twl6040->ready);	twl6040->rev = twl6040_reg_read(twl6040, TWL6040_REG_ASICREV);	if (gpio_is_valid(twl6040->audpwron)) {		ret = gpio_request(twl6040->audpwron, "audpwron");		if (ret)			goto gpio1_err;		ret = gpio_direction_output(twl6040->audpwron, 0);		if (ret)			goto gpio2_err;	}	/* ERRATA: Automatic power-up is not possible in ES1.0 */	if (twl6040->rev == TWL6040_REV_ES1_0)		twl6040->audpwron = -EINVAL;	/* codec interrupt */	ret = twl6040_irq_init(twl6040);	if (ret)		goto gpio2_err;	ret = request_threaded_irq(twl6040->irq_base + TWL6040_IRQ_READY,				   NULL, twl6040_naudint_handler, 0,				   "twl6040_irq_ready", twl6040);	if (ret) {		dev_err(twl6040->dev, "READY IRQ request failed: %d/n",			ret);		goto irq_err;	}	/* dual-access registers controlled by I2C only */	twl6040_set_bits(twl6040, TWL6040_REG_ACCCTL, TWL6040_I2CSEL);	if (pdata->codec) {		int irq = twl6040->irq_base + TWL6040_IRQ_PLUG;		cell = &twl6040->cells[children];		cell->name = "twl6040-codec";		twl6040_codec_rsrc[0].start = irq;		twl6040_codec_rsrc[0].end = irq;		cell->resources = twl6040_codec_rsrc;		cell->num_resources = ARRAY_SIZE(twl6040_codec_rsrc);		cell->platform_data = pdata->codec;		cell->pdata_size = sizeof(*pdata->codec);		children++;	}	if (pdata->vibra) {		int irq = twl6040->irq_base + TWL6040_IRQ_VIB;		cell = &twl6040->cells[children];		cell->name = "twl6040-vibra";		twl6040_vibra_rsrc[0].start = irq;		twl6040_vibra_rsrc[0].end = irq;		cell->resources = twl6040_vibra_rsrc;		cell->num_resources = ARRAY_SIZE(twl6040_vibra_rsrc);		cell->platform_data = pdata->vibra;		cell->pdata_size = sizeof(*pdata->vibra);		children++;	}	if (children) {		ret = mfd_add_devices(&pdev->dev, pdev->id, twl6040->cells,				      children, NULL, 0);		if (ret)//.........这里部分代码省略.........
开发者ID:CSCLOG,项目名称:beaglebone,代码行数:101,


示例20: twl6040_power_up_completion

static int twl6040_power_up_completion(struct twl6040 *twl6040,				       int naudint){	int time_left;	int round = 0;	int ret = 0;	int retry = 0;	u8 intid;	u8 ncpctl;	u8 ldoctl;	u8 lppllctl;	u8 ncpctl_exp;	u8 ldoctl_exp;	u8 lppllctl_exp;	/* NCPCTL expected value: NCP enabled */	ncpctl_exp = (TWL6040_TSHUTENA | TWL6040_NCPENA);	/* LDOCTL expected value: HS/LS LDOs and Reference enabled */	ldoctl_exp = (TWL6040_REFENA | TWL6040_HSLDOENA | TWL6040_LSLDOENA);	/* LPPLLCTL expected value: Low-Power PLL enabled */	lppllctl_exp = TWL6040_LPLLENA;	do {		gpio_set_value(twl6040->audpwron, 1);		time_left = wait_for_completion_timeout(&twl6040->ready,							msecs_to_jiffies(700));		if (!time_left) {			intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);			if (!(intid & TWL6040_READYINT)) {				dev_err(twl6040->dev,					"timeout waiting for READYINT/n");				return -ETIMEDOUT;			}		}		/*		 * Power on seemingly completed.		 * Look for clues that the twl6040 might be still booting.		 */		retry = 0;		ncpctl = twl6040_reg_read(twl6040, TWL6040_REG_NCPCTL);		if (ncpctl != ncpctl_exp)			retry++;		ldoctl = twl6040_reg_read(twl6040, TWL6040_REG_LDOCTL);		if (ldoctl != ldoctl_exp)			retry++;		lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL);		if (lppllctl != lppllctl_exp)			retry++;		if (retry) {			dev_err(twl6040->dev,				"NCPCTL: 0x%02x (should be 0x%02x)/n"				"LDOCTL: 0x%02x (should be 0x%02x)/n"				"LPLLCTL: 0x%02x (should be 0x%02x)/n",				ncpctl, ncpctl_exp,				ldoctl, ldoctl_exp,				lppllctl, lppllctl_exp);			round++;			gpio_set_value(twl6040->audpwron, 0);			usleep_range(1000, 1500);			continue;		}	} while (round && (round < 3));	if (round >= 3) {		dev_err(twl6040->dev,			"Automatic power on failed, reverting to manual/n");		twl6040->audpwron = -EINVAL;		ret = twl6040_power_up(twl6040);		if (ret)			dev_err(twl6040->dev, "Manual power-up failed/n");	}	return ret;}
开发者ID:nickh186,项目名称:Samsung-GT-P3113-AOSP-CM-Kernel-and-Ramdisk,代码行数:80,


示例21: twl6040_power_down

/* twl6040 codec manual power-down sequence */static int twl6040_power_down(struct twl6040_codec *twl6040){	u8 ncpctl, ldoctl, lppllctl, accctl;	int ret;	ncpctl = twl6040_reg_read(twl6040, TWL6040_REG_NCPCTL);	ldoctl = twl6040_reg_read(twl6040, TWL6040_REG_LDOCTL);	lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL);	accctl = twl6040_reg_read(twl6040, TWL6040_REG_ACCCTL);	/* enable internal oscillator */	ldoctl |= TWL6040_OSCENA;	ret = twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	if (ret)		return ret;	udelay(10);	/* disable low-power pll */	lppllctl &= ~TWL6040_LPLLENA;	ret = twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);	if (ret)		goto lppll_err;	/* disable low-side ldo */	ldoctl &= ~TWL6040_LSLDOENA;	ret = twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	if (ret)		goto lsldo_err;	udelay(244);	/* disable negative charge pump */	ncpctl &= ~(TWL6040_NCPENA | TWL6040_NCPOPEN);	ret = twl6040_reg_write(twl6040, TWL6040_REG_NCPCTL, ncpctl);	if (ret)		goto ncp_err;	udelay(488);	/* disable high-side ldo */	ldoctl &= ~TWL6040_HSLDOENA;	ret = twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	if (ret)		goto hsldo_err;	udelay(244);	/* disable internal oscillator */	ldoctl &= ~TWL6040_OSCENA;	ret = twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	if (ret)		goto osc_err;	/* disable reference system */	ldoctl &= ~TWL6040_REFENA;	ret = twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	if (ret)		goto ref_err;	msleep(10);	return 0;ref_err:	ldoctl |= TWL6040_OSCENA;	twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	udelay(10);osc_err:	ldoctl |= TWL6040_HSLDOENA;	twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	udelay(244);hsldo_err:	ncpctl |= TWL6040_NCPENA | TWL6040_NCPOPEN;	twl6040_reg_write(twl6040, TWL6040_REG_NCPCTL, ncpctl);	udelay(488);ncp_err:	ldoctl |= TWL6040_LSLDOENA;	twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	udelay(244);lsldo_err:	lppllctl |= TWL6040_LPLLENA;	twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);lppll_err:	lppllctl |= TWL6040_LPLLENA;	twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);	accctl |= TWL6040_RESETSPLIT;	twl6040_reg_write(twl6040, TWL6040_REG_ACCCTL, accctl);	mdelay(5);	accctl &= ~TWL6040_RESETSPLIT;	twl6040_reg_write(twl6040, TWL6040_REG_ACCCTL, accctl);	ldoctl &= ~TWL6040_OSCENA;	twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);	msleep(10);	return ret;}
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:93,


示例22: twl6040_set_pll

int twl6040_set_pll(struct twl6040 *twl6040, int pll_id,		    unsigned int freq_in, unsigned int freq_out){	u8 hppllctl, lppllctl;	int ret = 0;	mutex_lock(&twl6040->mutex);	hppllctl = twl6040_reg_read(twl6040, TWL6040_REG_HPPLLCTL);	lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL);	/* Force full reconfiguration when switching between PLL */	if (pll_id != twl6040->pll) {		twl6040->sysclk = 0;		twl6040->mclk = 0;	}	switch (pll_id) {	case TWL6040_SYSCLK_SEL_LPPLL:		/* low-power PLL divider */		/* Change the sysclk configuration only if it has been canged */		if (twl6040->sysclk != freq_out) {			switch (freq_out) {			case 17640000:				lppllctl |= TWL6040_LPLLFIN;				break;			case 19200000:				lppllctl &= ~TWL6040_LPLLFIN;				break;			default:				dev_err(twl6040->dev,					"freq_out %d not supported/n",					freq_out);				ret = -EINVAL;				goto pll_out;			}			twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL,					  lppllctl);		}		/* The PLL in use has not been change, we can exit */		if (twl6040->pll == pll_id)			break;		switch (freq_in) {		case 32768:			lppllctl |= TWL6040_LPLLENA;			twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL,					  lppllctl);			mdelay(5);			lppllctl &= ~TWL6040_HPLLSEL;			twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL,					  lppllctl);			hppllctl &= ~TWL6040_HPLLENA;			twl6040_reg_write(twl6040, TWL6040_REG_HPPLLCTL,					  hppllctl);			break;		default:			dev_err(twl6040->dev,				"freq_in %d not supported/n", freq_in);			ret = -EINVAL;			goto pll_out;		}		break;	case TWL6040_SYSCLK_SEL_HPPLL:		/* high-performance PLL can provide only 19.2 MHz */		if (freq_out != 19200000) {			dev_err(twl6040->dev,				"freq_out %d not supported/n", freq_out);			ret = -EINVAL;			goto pll_out;		}		if (twl6040->mclk != freq_in) {			hppllctl &= ~TWL6040_MCLK_MSK;			switch (freq_in) {			case 12000000:				/* PLL enabled, active mode */				hppllctl |= TWL6040_MCLK_12000KHZ |					    TWL6040_HPLLENA;				break;			case 19200000:				/*				* PLL disabled				* (enable PLL if MCLK jitter quality				*  doesn't meet specification)				*/				hppllctl |= TWL6040_MCLK_19200KHZ;				break;			case 26000000:				/* PLL enabled, active mode */				hppllctl |= TWL6040_MCLK_26000KHZ |					    TWL6040_HPLLENA;				break;			case 38400000:				/* PLL enabled, active mode */				hppllctl |= TWL6040_MCLK_38400KHZ |					    TWL6040_HPLLENA;				break;//.........这里部分代码省略.........
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:101,


示例23: twl6040_probe

static int twl6040_probe(struct i2c_client *client,			 const struct i2c_device_id *id){	struct device_node *node = client->dev.of_node;	struct twl6040 *twl6040;	struct mfd_cell *cell = NULL;	int irq, ret, children = 0;	if (!node) {		dev_err(&client->dev, "of node is missing/n");		return -EINVAL;	}	/* In order to operate correctly we need valid interrupt config */	if (!client->irq) {		dev_err(&client->dev, "Invalid IRQ configuration/n");		return -EINVAL;	}	twl6040 = devm_kzalloc(&client->dev, sizeof(struct twl6040),			       GFP_KERNEL);	if (!twl6040)		return -ENOMEM;	twl6040->regmap = devm_regmap_init_i2c(client, &twl6040_regmap_config);	if (IS_ERR(twl6040->regmap))		return PTR_ERR(twl6040->regmap);	i2c_set_clientdata(client, twl6040);	twl6040->clk32k = devm_clk_get(&client->dev, "clk32k");	if (IS_ERR(twl6040->clk32k)) {		if (PTR_ERR(twl6040->clk32k) == -EPROBE_DEFER)			return -EPROBE_DEFER;		dev_dbg(&client->dev, "clk32k is not handled/n");		twl6040->clk32k = NULL;	}	twl6040->mclk = devm_clk_get(&client->dev, "mclk");	if (IS_ERR(twl6040->mclk)) {		if (PTR_ERR(twl6040->mclk) == -EPROBE_DEFER)			return -EPROBE_DEFER;		dev_dbg(&client->dev, "mclk is not handled/n");		twl6040->mclk = NULL;	}	twl6040->supplies[0].supply = "vio";	twl6040->supplies[1].supply = "v2v1";	ret = devm_regulator_bulk_get(&client->dev, TWL6040_NUM_SUPPLIES,				      twl6040->supplies);	if (ret != 0) {		dev_err(&client->dev, "Failed to get supplies: %d/n", ret);		return ret;	}	ret = regulator_bulk_enable(TWL6040_NUM_SUPPLIES, twl6040->supplies);	if (ret != 0) {		dev_err(&client->dev, "Failed to enable supplies: %d/n", ret);		return ret;	}	twl6040->dev = &client->dev;	twl6040->irq = client->irq;	mutex_init(&twl6040->mutex);	init_completion(&twl6040->ready);	regmap_register_patch(twl6040->regmap, twl6040_patch,			      ARRAY_SIZE(twl6040_patch));	twl6040->rev = twl6040_reg_read(twl6040, TWL6040_REG_ASICREV);	if (twl6040->rev < 0) {		dev_err(&client->dev, "Failed to read revision register: %d/n",			twl6040->rev);		ret = twl6040->rev;		goto gpio_err;	}	/* ERRATA: Automatic power-up is not possible in ES1.0 */	if (twl6040_get_revid(twl6040) > TWL6040_REV_ES1_0)		twl6040->audpwron = of_get_named_gpio(node,						      "ti,audpwron-gpio", 0);	else		twl6040->audpwron = -EINVAL;	if (gpio_is_valid(twl6040->audpwron)) {		ret = devm_gpio_request_one(&client->dev, twl6040->audpwron,					    GPIOF_OUT_INIT_LOW, "audpwron");		if (ret)			goto gpio_err;		/* Clear any pending interrupt */		twl6040_reg_read(twl6040, TWL6040_REG_INTID);	}	ret = regmap_add_irq_chip(twl6040->regmap, twl6040->irq, IRQF_ONESHOT,				  0, &twl6040_irq_chip, &twl6040->irq_data);	if (ret < 0)		goto gpio_err;//.........这里部分代码省略.........
开发者ID:avagin,项目名称:linux,代码行数:101,


示例24: twl6040_probe

static int twl6040_probe(struct i2c_client *client,			 const struct i2c_device_id *id){	struct twl6040_platform_data *pdata = client->dev.platform_data;	struct device_node *node = client->dev.of_node;	struct twl6040 *twl6040;	struct mfd_cell *cell = NULL;	int irq, ret, children = 0;	if (!pdata && !node) {		dev_err(&client->dev, "Platform data is missing/n");		return -EINVAL;	}	/* In order to operate correctly we need valid interrupt config */	if (!client->irq) {		dev_err(&client->dev, "Invalid IRQ configuration/n");		return -EINVAL;	}	twl6040 = devm_kzalloc(&client->dev, sizeof(struct twl6040),			       GFP_KERNEL);	if (!twl6040) {		ret = -ENOMEM;		goto err;	}	twl6040->regmap = devm_regmap_init_i2c(client, &twl6040_regmap_config);	if (IS_ERR(twl6040->regmap)) {		ret = PTR_ERR(twl6040->regmap);		goto err;	}	i2c_set_clientdata(client, twl6040);	twl6040->supplies[0].supply = "vio";	twl6040->supplies[1].supply = "v2v1";	ret = devm_regulator_bulk_get(&client->dev, TWL6040_NUM_SUPPLIES,				 twl6040->supplies);	if (ret != 0) {		dev_err(&client->dev, "Failed to get supplies: %d/n", ret);		goto regulator_get_err;	}	ret = regulator_bulk_enable(TWL6040_NUM_SUPPLIES, twl6040->supplies);	if (ret != 0) {		dev_err(&client->dev, "Failed to enable supplies: %d/n", ret);		goto regulator_get_err;	}	twl6040->dev = &client->dev;	twl6040->irq = client->irq;	mutex_init(&twl6040->mutex);	init_completion(&twl6040->ready);	twl6040->rev = twl6040_reg_read(twl6040, TWL6040_REG_ASICREV);	/* ERRATA: Automatic power-up is not possible in ES1.0 */	if (twl6040_get_revid(twl6040) > TWL6040_REV_ES1_0) {		if (pdata)			twl6040->audpwron = pdata->audpwron_gpio;		else			twl6040->audpwron = of_get_named_gpio(node,						"ti,audpwron-gpio", 0);	} else		twl6040->audpwron = -EINVAL;	if (gpio_is_valid(twl6040->audpwron)) {		ret = devm_gpio_request_one(&client->dev, twl6040->audpwron,					GPIOF_OUT_INIT_LOW, "audpwron");		if (ret)			goto gpio_err;	}	ret = regmap_add_irq_chip(twl6040->regmap, twl6040->irq,			IRQF_ONESHOT, 0, &twl6040_irq_chip,			&twl6040->irq_data);	if (ret < 0)		goto gpio_err;	twl6040->irq_ready = regmap_irq_get_virq(twl6040->irq_data,					       TWL6040_IRQ_READY);	twl6040->irq_th = regmap_irq_get_virq(twl6040->irq_data,					       TWL6040_IRQ_TH);	ret = devm_request_threaded_irq(twl6040->dev, twl6040->irq_ready, NULL,				   twl6040_readyint_handler, IRQF_ONESHOT,				   "twl6040_irq_ready", twl6040);	if (ret) {		dev_err(twl6040->dev, "READY IRQ request failed: %d/n", ret);		goto readyirq_err;	}	ret = devm_request_threaded_irq(twl6040->dev, twl6040->irq_th, NULL,				   twl6040_thint_handler, IRQF_ONESHOT,				   "twl6040_irq_th", twl6040);	if (ret) {		dev_err(twl6040->dev, "Thermal IRQ request failed: %d/n", ret);		goto thirq_err;//.........这里部分代码省略.........
开发者ID:AD5GB,项目名称:kernel_n5_3.10-experimental,代码行数:101,


示例25: twl6040_codec_probe

static int __devinit twl6040_codec_probe(struct platform_device *pdev){	struct twl4030_codec_data *pdata = pdev->dev.platform_data;	struct twl6040_codec *twl6040;	struct mfd_cell *cell = NULL;	unsigned int naudint;	int audpwron;	int ret, children = 0;	u8 icrev = 0, accctl;	if(!pdata) {		dev_err(&pdev->dev, "Platform data is missing/n");		return -EINVAL;	}	twl6040 = kzalloc(sizeof(struct twl6040_codec), GFP_KERNEL);	if (!twl6040)		return -ENOMEM;	platform_set_drvdata(pdev, twl6040);	twl6040_codec_dev = pdev;	twl6040->dev = &pdev->dev;	mutex_init(&twl6040->mutex);	mutex_init(&twl6040->io_mutex);	icrev = twl6040_reg_read(twl6040, TWL6040_REG_ASICREV);	if (pdata && (icrev > 0))		audpwron = pdata->audpwron_gpio;	else		audpwron = -EINVAL;	if (pdata)		naudint = pdata->naudint_irq;	else		naudint = 0;	twl6040->audpwron = audpwron;	twl6040->powered = 0;	twl6040->irq = naudint;	twl6040->irq_base = pdata->irq_base;	init_completion(&twl6040->ready);	if (gpio_is_valid(audpwron)) {		ret = gpio_request(audpwron, "audpwron");		if (ret)			goto gpio1_err;		ret = gpio_direction_output(audpwron, 0);		if (ret)			goto gpio2_err;	}	if (naudint) {		/* codec interrupt */		ret = twl6040_irq_init(twl6040);		if (ret)			goto gpio2_err;		ret = twl6040_request_irq(twl6040, TWL6040_IRQ_READY,				  twl6040_naudint_handler, "twl6040_irq_ready",				  twl6040);		if (ret) {			dev_err(twl6040->dev, "READY IRQ request failed: %d/n",				ret);			goto irq_err;		}	}	/* dual-access registers controlled by I2C only */	accctl = twl6040_reg_read(twl6040, TWL6040_REG_ACCCTL);	twl6040_reg_write(twl6040, TWL6040_REG_ACCCTL, accctl | TWL6040_I2CSEL);	if (pdata->audio) {		cell = &twl6040->cells[children];		cell->name = "twl6040-codec";		cell->platform_data = pdata->audio;		cell->data_size = sizeof(*pdata->audio);		children++;	}	if (pdata->vibra) {		cell = &twl6040->cells[children];		cell->name = "vib-twl6040";		cell->platform_data = pdata->vibra;		cell->data_size = sizeof(*pdata->vibra);		children++;	}	if (children) {		ret = mfd_add_devices(&pdev->dev, pdev->id, twl6040->cells,				      children, NULL, 0);		if (ret)			goto mfd_err;	} else {		dev_err(&pdev->dev, "No platform data found for children/n");		ret = -ENODEV;		goto mfd_err;	}//.........这里部分代码省略.........
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:101,



注:本文中的twl6040_reg_read函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ twl_class_is_6030函数代码示例
C++ twl6030_writeb函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。