diff options
-rw-r--r-- | arch/arm/boot/dts/hi3620.dtsi | 4 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-designware-hs.c | 14 | ||||
-rw-r--r-- | drivers/input/touchscreen/atmel_mXT224E.c | 12 | ||||
-rw-r--r-- | drivers/mmc/host/dw_mmc-hisilicon.c | 40 |
4 files changed, 59 insertions, 11 deletions
diff --git a/arch/arm/boot/dts/hi3620.dtsi b/arch/arm/boot/dts/hi3620.dtsi index c2e7ea59ef48..2974dbaef18d 100644 --- a/arch/arm/boot/dts/hi3620.dtsi +++ b/arch/arm/boot/dts/hi3620.dtsi @@ -1483,7 +1483,7 @@ &dma0 19>; /* write channel */ dma-names = "rx", "tx"; status = "disabled"; - delay-reg = <0 1>; + delay-reg = <0 0>; }; i2c1: i2c@fcb09000 { @@ -1496,7 +1496,7 @@ dmas = <&dma0 20 /* read channel */ &dma0 21>; /* write channel */ dma-names = "rx", "tx"; - delay-reg = <0 2>; + delay-reg = <0 1>; status = "disabled"; }; diff --git a/drivers/i2c/busses/i2c-designware-hs.c b/drivers/i2c/busses/i2c-designware-hs.c index 9b8a3b6faa34..3d58cbc49fdf 100644 --- a/drivers/i2c/busses/i2c-designware-hs.c +++ b/drivers/i2c/busses/i2c-designware-hs.c @@ -84,9 +84,11 @@ static int hs_dw_i2c_probe(struct platform_device *pdev) priv->delay_off = data[0]; priv->delay_bit = data[1]; +#ifdef I2C_DEALY_300NS if (pctrl) - writel(BIT((priv->delay_bit) << 16) | BIT(priv->delay_bit), - pctrl + priv->delay_off); + writel_relaxed((BIT(priv->delay_bit) << 16) | + BIT(priv->delay_bit), pctrl + priv->delay_off); +#endif d->irq = platform_get_irq(pdev, 0); if (d->irq < 0) { @@ -164,11 +166,13 @@ err: static int hs_dw_i2c_remove(struct platform_device *pdev) { struct dw_i2c_dev *d = platform_get_drvdata(pdev); - struct hs_i2c_priv_data *priv = d->priv; +#ifdef I2C_DEALY_300NS + struct hs_i2c_priv_data *priv = d->priv; if (pctrl) - writel(BIT((priv->delay_bit) << 16), pctrl + priv->delay_off); - + writel_relaxed((BIT(priv->delay_bit) << 16), + pctrl + priv->delay_off); +#endif platform_set_drvdata(pdev, NULL); i2c_del_adapter(&d->adapter); put_device(&pdev->dev); diff --git a/drivers/input/touchscreen/atmel_mXT224E.c b/drivers/input/touchscreen/atmel_mXT224E.c index 0f629c8c64e7..4642fd49b2d3 100644 --- a/drivers/input/touchscreen/atmel_mXT224E.c +++ b/drivers/input/touchscreen/atmel_mXT224E.c @@ -30,6 +30,12 @@ #include <linux/of_gpio.h> #include <linux/pinctrl/consumer.h> +#ifdef TS_ATMEL_DEBUG +#define TS_DEBUG_ATMEL(fmt, args...) pr_info(fmt, ##args) +#else +#define TS_DEBUG_ATMEL(fmt, args...) +#endif + #define ATMEL_MXT224E_NAME "atmel_mxt224e" #define INFO_BLK_FID 0 @@ -695,7 +701,6 @@ static void msg_process_multitouch(struct atmel_ts_data *ts, uint8_t *data, uint } } if (!(ts->grip_suppression & BIT(idx))) { - if (!ts->first_pressed) ts->finger_count++; ts->finger_pressed |= BIT(idx); if (ts->id->version >= 0x10 && ts->pre_data[0] < 2) { @@ -731,6 +736,8 @@ static void compatible_input_report(struct input_dev *idev, input_report_key(idev, BTN_TOUCH, 1); } else { + TS_DEBUG_ATMEL("k3ts, %s: Touch report_key x = %d, y = %d, z = %d, w = %d\n ", __func__, + fdata->x, fdata->y, fdata->z, fdata->w); input_report_abs(idev, ABS_MT_TOUCH_MAJOR, fdata->z); input_report_abs(idev, ABS_MT_WIDTH_MAJOR, fdata->w); input_report_abs(idev, ABS_MT_POSITION_X, fdata->x); @@ -1364,7 +1371,7 @@ static int atmel_ts_remove(struct i2c_client *client) static int atmel_ts_suspend(struct i2c_client *client, pm_message_t mesg) { struct atmel_ts_data *ts = i2c_get_clientdata(client); - struct atmel_i2c_platform_data *pdata = client->dev.platform_data; + struct atmel_i2c_platform_data *pdata = ts->pdata; uint8_t data[7]; int ret = 0; @@ -1443,7 +1450,6 @@ static int atmel_ts_resume(struct i2c_client *client) pr_err("k3ts, %s: failed to write config T6\n", __func__); mutex_unlock(&ts->lock); - enable_irq(client->irq); pr_info("[%s]: -\n", __func__); diff --git a/drivers/mmc/host/dw_mmc-hisilicon.c b/drivers/mmc/host/dw_mmc-hisilicon.c index 85c4271e2bd3..c09746689848 100644 --- a/drivers/mmc/host/dw_mmc-hisilicon.c +++ b/drivers/mmc/host/dw_mmc-hisilicon.c @@ -361,13 +361,51 @@ int dw_mci_hs_probe(struct platform_device *pdev) return dw_mci_pltfm_register(pdev, drv_data); } +#ifdef CONFIG_PM_SLEEP +static int dw_mci_hs_suspend(struct device *dev) +{ + int ret; + struct dw_mci *host = dev_get_drvdata(dev); + + ret = dw_mci_suspend(host); + if (ret) + return ret; + + return 0; +} + +static int dw_mci_hs_resume(struct device *dev) +{ + int ret; + struct dw_mci *host = dev_get_drvdata(dev); + struct dw_mci_hs_priv_data *priv = host->priv; + + if (priv->type == DW_MCI_TYPE_HI4511) { + int id = priv->id; + + dw_mci_hs_tun(host, id, MMC_TIMING_LEGACY); + } + + ret = dw_mci_resume(host); + if (ret) + return ret; + + return 0; +} +#else +#define dw_mci_hs_suspend NULL +#define dw_mci_hs_resume NULL +#endif /* CONFIG_PM_SLEEP */ + +SIMPLE_DEV_PM_OPS(dw_mci_hs_pmops, dw_mci_hs_suspend, dw_mci_hs_resume); + static struct platform_driver dw_mci_hs_pltfm_driver = { .probe = dw_mci_hs_probe, .remove = dw_mci_pltfm_remove, .driver = { .name = DRIVER_NAME, .of_match_table = of_match_ptr(dw_mci_hs_match), - .pm = &dw_mci_pltfm_pmops, + .pm = &dw_mci_hs_pmops, }, }; |