 memset(drv_data, 0, sizeof(struct mv64xxx_i2c_data)); 
mv64xxx_i2c_probe(struct device *dev){	struct platform_device		*pd = to_platform_device(dev);	struct mv64xxx_i2c_data		*drv_data;	struct mv64xxx_i2c_pdata	*pdata = dev->platform_data;	int	rc;	if ((pd->id != 0) || !pdata)		return -ENODEV;	drv_data = kmalloc(sizeof(struct mv64xxx_i2c_data), GFP_KERNEL);	if (!drv_data)		return -ENOMEM;	memset(drv_data, 0, sizeof(struct mv64xxx_i2c_data));	if (mv64xxx_i2c_map_regs(pd, drv_data)) {		rc = -ENODEV;		goto exit_kfree;	}	strncpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",		I2C_NAME_SIZE);	init_waitqueue_head(&drv_data->waitq);	spin_lock_init(&drv_data->lock);	drv_data->freq_m = pdata->freq_m;	drv_data->freq_n = pdata->freq_n;	drv_data->irq = platform_get_irq(pd, 0);	drv_data->adapter.id = I2C_HW_MV64XXX;	drv_data->adapter.algo = &mv64xxx_i2c_algo;	drv_data->adapter.owner = THIS_MODULE;	drv_data->adapter.class = I2C_CLASS_HWMON;	drv_data->adapter.timeout = pdata->timeout;	drv_data->adapter.retries = pdata->retries;	dev_set_drvdata(dev, drv_data);	i2c_set_adapdata(&drv_data->adapter, drv_data);	if (request_irq(drv_data->irq, mv64xxx_i2c_intr, 0,		MV64XXX_I2C_CTLR_NAME, drv_data)) {		dev_err(dev, "mv64xxx: Can't register intr handler "			"irq: %d\n", drv_data->irq);		rc = -EINVAL;		goto exit_unmap_regs;	} else if ((rc = i2c_add_adapter(&drv_data->adapter)) != 0) {		dev_err(dev, "mv64xxx: Can't add i2c adapter, rc: %d\n", -rc);		goto exit_free_irq;	}	mv64xxx_i2c_hw_init(drv_data);	return 0;	exit_free_irq:		free_irq(drv_data->irq, drv_data);	exit_unmap_regs:		mv64xxx_i2c_unmap_regs(drv_data);	exit_kfree:		kfree(drv_data);	return rc;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/5263ebb51eb098b01caf229498c954999117e4a7/i2c-mv64xxx.c/buggy/drivers/i2c/busses/i2c-mv64xxx.c