--- zzzz-none-000/linux-3.10.107/drivers/i2c/busses/i2c-designware-platdrv.c 2017-06-27 09:49:32.000000000 +0000 +++ vr9-7490-729/linux-3.10.107/drivers/i2c/busses/i2c-designware-platdrv.c 2021-11-10 11:53:55.000000000 +0000 @@ -25,6 +25,13 @@ * ---------------------------------------------------------------------------- * */ + +/** + * Some part of this file is modified by Ikanos Communications. + * + * Copyright (C) 2013-2014 Ikanos Communications. + */ + #include #include #include @@ -43,6 +50,11 @@ #include #include "i2c-designware-core.h" +#if defined(CONFIG_FUSIV_VX585) && defined(CONFIG_CPU_MIPSR2_IRQ_VI) +#include +fusiv_irq_params_t i2c_fusiv_irq; +#endif + static struct i2c_algorithm i2c_dw_algo = { .master_xfer = i2c_dw_xfer, .functionality = i2c_dw_func, @@ -103,10 +115,11 @@ dev = devm_kzalloc(&pdev->dev, sizeof(struct dw_i2c_dev), GFP_KERNEL); if (!dev) return -ENOMEM; - +#ifndef CONFIG_FUSIV_VX585 dev->base = devm_ioremap_resource(&pdev->dev, mem); if (IS_ERR(dev->base)) return PTR_ERR(dev->base); +#endif init_completion(&dev->cmd_complete); mutex_init(&dev->lock); @@ -114,13 +127,14 @@ dev->irq = irq; platform_set_drvdata(pdev, dev); +#ifndef CONFIG_FUSIV_VX585 dev->clk = devm_clk_get(&pdev->dev, NULL); dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz; if (IS_ERR(dev->clk)) return PTR_ERR(dev->clk); clk_prepare_enable(dev->clk); - +#endif dev->functionality = I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | @@ -145,8 +159,19 @@ return r; i2c_dw_disable_int(dev); +/* +#if defined(CONFIG_FUSIV_VX585) && defined(CONFIG_CPU_MIPSR2_IRQ_VI) + i2c_fusiv_irq.ipc_src = I2C_INT; + i2c_fusiv_irq.priv = (void *)dev; + r = devm_request_irq(&pdev->dev, dev->irq, i2c_dw_isr, IRQF_SHARED, + pdev->name, &i2c_fusiv_irq); +*/ +#if defined(CONFIG_FUSIV_VX585) + r = request_irq(86, i2c_dw_isr, IRQF_SHARED, pdev->name, dev); +#else r = devm_request_irq(&pdev->dev, dev->irq, i2c_dw_isr, IRQF_SHARED, pdev->name, dev); +#endif if (r) { dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); return r;