lkml.org 
[lkml]   [2008]   [May]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/4] wm97xx-core: Fix race on PHY init
    Date
    The chip phy_init() function must be called before the dig_enable() function
    but dig_enable() is called when the device is opened and we only call
    phy_init() after having reigstered the device, meaning the two can race.
    Fix this by doing the phy_init() before we register the input device.

    Thanks to Rodolfo Giometti <giometti@enneenne.com> for the report.

    Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
    ---
    drivers/input/touchscreen/wm97xx-core.c | 22 +++++++++++-----------
    1 files changed, 11 insertions(+), 11 deletions(-)

    diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c
    index 8a00918..cdc24ad 100644
    --- a/drivers/input/touchscreen/wm97xx-core.c
    +++ b/drivers/input/touchscreen/wm97xx-core.c
    @@ -608,6 +608,17 @@ static int wm97xx_probe(struct device *dev)
    goto alloc_err;
    }

    + /* set up physical characteristics */
    + wm->codec->phy_init(wm);
    +
    + /* load gpio cache */
    + wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG);
    + wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
    + wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY);
    + wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP);
    + wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
    + wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE);
    +
    wm->input_dev = input_allocate_device();
    if (wm->input_dev == NULL) {
    ret = -ENOMEM;
    @@ -635,17 +646,6 @@ static int wm97xx_probe(struct device *dev)
    if (ret < 0)
    goto dev_alloc_err;

    - /* set up physical characteristics */
    - wm->codec->phy_init(wm);
    -
    - /* load gpio cache */
    - wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG);
    - wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
    - wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY);
    - wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP);
    - wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
    - wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE);
    -
    /* register our battery device */
    wm->battery_dev = platform_device_alloc("wm97xx-battery", -1);
    if (!wm->battery_dev) {
    --
    1.5.5.1


    \
     
     \ /
      Last update: 2008-05-26 15:47    [W:0.022 / U:31.128 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site