int timeout = 0;
/* get codec */
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
/* When the touchscreen is not in use, we may have to power up
* the AUX ADC before we can use sample the AUX inputs->
wm->codec->dig_enable(wm, false);
}
- mutex_unlock(&wm->codec_mutex);
return (rc == RC_VALID ? auxval & 0xfff : -EBUSY);
}
EXPORT_SYMBOL_GPL(wm97xx_read_aux_adc);
enum wm97xx_gpio_status wm97xx_get_gpio(struct wm97xx *wm, u32 gpio)
{
u16 status;
- enum wm97xx_gpio_status ret;
- mutex_lock(&wm->codec_mutex);
- status = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
-
- if (status & gpio)
- ret = WM97XX_GPIO_HIGH;
- else
- ret = WM97XX_GPIO_LOW;
+ guard(mutex)(&wm->codec_mutex);
- mutex_unlock(&wm->codec_mutex);
- return ret;
+ status = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
+ return (status & gpio) ? WM97XX_GPIO_HIGH : WM97XX_GPIO_LOW;
}
EXPORT_SYMBOL_GPL(wm97xx_get_gpio);
{
u16 reg;
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
+
reg = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
if (status == WM97XX_GPIO_HIGH)
wm97xx_reg_write(wm, AC97_GPIO_STATUS, reg << 1);
else
wm97xx_reg_write(wm, AC97_GPIO_STATUS, reg);
- mutex_unlock(&wm->codec_mutex);
}
EXPORT_SYMBOL_GPL(wm97xx_set_gpio);
{
u16 reg;
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
+
reg = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
if (pol == WM97XX_GPIO_POL_HIGH)
reg &= ~gpio;
wm97xx_reg_write(wm, AC97_GPIO_CFG, reg);
- mutex_unlock(&wm->codec_mutex);
}
EXPORT_SYMBOL_GPL(wm97xx_config_gpio);
wm->pen_is_down = 0;
} else {
u16 status, pol;
- mutex_lock(&wm->codec_mutex);
+
+ guard(mutex)(&wm->codec_mutex);
+
status = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
pol = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
else
wm97xx_reg_write(wm, AC97_GPIO_STATUS, status &
~WM97XX_GPIO_13);
- mutex_unlock(&wm->codec_mutex);
}
/* If the system is not using continuous mode or it provides a
struct wm97xx_data data;
int rc;
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
if (wm->mach_ops && wm->mach_ops->acc_enabled)
rc = wm->mach_ops->acc_pen_down(wm);
abs_y[0] > (data.y & 0xfff) ||
abs_y[1] < (data.y & 0xfff)) {
dev_dbg(wm->dev, "Measurement out of range, dropping it\n");
- rc = RC_AGAIN;
- goto out;
+ return RC_AGAIN;
}
input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff);
wm->ts_reader_interval = wm->ts_reader_min_interval;
}
-out:
- mutex_unlock(&wm->codec_mutex);
return rc;
}
else
suspend_mode = 0;
- mutex_lock(&wm->input_dev->mutex);
+ guard(mutex)(&wm->input_dev->mutex);
+
if (input_device_enabled(wm->input_dev))
cancel_delayed_work_sync(&wm->ts_reader);
reg = wm97xx_reg_read(wm, AC97_EXTENDED_MID) | 0x8000;
wm97xx_reg_write(wm, AC97_EXTENDED_MID, reg);
}
- mutex_unlock(&wm->input_dev->mutex);
return 0;
}
{
struct wm97xx *wm = dev_get_drvdata(dev);
- mutex_lock(&wm->input_dev->mutex);
+ guard(mutex)(&wm->input_dev->mutex);
+
/* restore digitiser and gpios */
if (wm->id == WM9713_ID2) {
wm97xx_reg_write(wm, AC97_WM9713_DIG1, wm->dig[0]);
queue_delayed_work(wm->ts_workq, &wm->ts_reader,
wm->ts_reader_interval);
}
- mutex_unlock(&wm->input_dev->mutex);
return 0;
}
int wm97xx_register_mach_ops(struct wm97xx *wm,
struct wm97xx_mach_ops *mach_ops)
{
- mutex_lock(&wm->codec_mutex);
- if (wm->mach_ops) {
- mutex_unlock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
+
+ if (wm->mach_ops)
return -EINVAL;
- }
+
wm->mach_ops = mach_ops;
- mutex_unlock(&wm->codec_mutex);
return 0;
}
void wm97xx_unregister_mach_ops(struct wm97xx *wm)
{
- mutex_lock(&wm->codec_mutex);
+ guard(mutex)(&wm->codec_mutex);
+
wm->mach_ops = NULL;
- mutex_unlock(&wm->codec_mutex);
}
EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops);