diff options
author | Peter Rosin <peda@axentia.se> | 2016-05-04 16:15:35 -0400 |
---|---|---|
committer | Wolfram Sang <wsa@the-dreams.de> | 2016-05-04 16:40:12 -0400 |
commit | 3f30e40b96b085ff25babaa8d6bc0b75c8fb32b2 (patch) | |
tree | 5f71427879a21918b54458999a0cc379238ce305 | |
parent | e01fc42d78ab953f6de4ff9273cb9d6d9ed3dd37 (diff) |
[media] rtl2832: regmap is aware of lockdep, drop local locking hack
Tested-by: Antti Palosaari <crope@iki.fi>
Reviewed-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
-rw-r--r-- | drivers/media/dvb-frontends/rtl2832.c | 30 | ||||
-rw-r--r-- | drivers/media/dvb-frontends/rtl2832_priv.h | 1 |
2 files changed, 0 insertions, 31 deletions
diff --git a/drivers/media/dvb-frontends/rtl2832.c b/drivers/media/dvb-frontends/rtl2832.c index 957523f07f61..bfb6beedd40b 100644 --- a/drivers/media/dvb-frontends/rtl2832.c +++ b/drivers/media/dvb-frontends/rtl2832.c | |||
@@ -890,32 +890,6 @@ static bool rtl2832_volatile_reg(struct device *dev, unsigned int reg) | |||
890 | return false; | 890 | return false; |
891 | } | 891 | } |
892 | 892 | ||
893 | /* | ||
894 | * FIXME: Hack. Implement own regmap locking in order to silence lockdep | ||
895 | * recursive lock warning. That happens when regmap I2C client calls I2C mux | ||
896 | * adapter, which leads demod I2C repeater enable via demod regmap. Operation | ||
897 | * takes two regmap locks recursively - but those are different regmap instances | ||
898 | * in a two different I2C drivers, so it is not deadlock. Proper fix is to make | ||
899 | * regmap aware of lockdep. | ||
900 | */ | ||
901 | static void rtl2832_regmap_lock(void *__dev) | ||
902 | { | ||
903 | struct rtl2832_dev *dev = __dev; | ||
904 | struct i2c_client *client = dev->client; | ||
905 | |||
906 | dev_dbg(&client->dev, "\n"); | ||
907 | mutex_lock(&dev->regmap_mutex); | ||
908 | } | ||
909 | |||
910 | static void rtl2832_regmap_unlock(void *__dev) | ||
911 | { | ||
912 | struct rtl2832_dev *dev = __dev; | ||
913 | struct i2c_client *client = dev->client; | ||
914 | |||
915 | dev_dbg(&client->dev, "\n"); | ||
916 | mutex_unlock(&dev->regmap_mutex); | ||
917 | } | ||
918 | |||
919 | static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client) | 893 | static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client) |
920 | { | 894 | { |
921 | struct rtl2832_dev *dev = i2c_get_clientdata(client); | 895 | struct rtl2832_dev *dev = i2c_get_clientdata(client); |
@@ -1082,12 +1056,8 @@ static int rtl2832_probe(struct i2c_client *client, | |||
1082 | dev->sleeping = true; | 1056 | dev->sleeping = true; |
1083 | INIT_DELAYED_WORK(&dev->i2c_gate_work, rtl2832_i2c_gate_work); | 1057 | INIT_DELAYED_WORK(&dev->i2c_gate_work, rtl2832_i2c_gate_work); |
1084 | /* create regmap */ | 1058 | /* create regmap */ |
1085 | mutex_init(&dev->regmap_mutex); | ||
1086 | dev->regmap_config.reg_bits = 8, | 1059 | dev->regmap_config.reg_bits = 8, |
1087 | dev->regmap_config.val_bits = 8, | 1060 | dev->regmap_config.val_bits = 8, |
1088 | dev->regmap_config.lock = rtl2832_regmap_lock, | ||
1089 | dev->regmap_config.unlock = rtl2832_regmap_unlock, | ||
1090 | dev->regmap_config.lock_arg = dev, | ||
1091 | dev->regmap_config.volatile_reg = rtl2832_volatile_reg, | 1061 | dev->regmap_config.volatile_reg = rtl2832_volatile_reg, |
1092 | dev->regmap_config.max_register = 5 * 0x100, | 1062 | dev->regmap_config.max_register = 5 * 0x100, |
1093 | dev->regmap_config.ranges = regmap_range_cfg, | 1063 | dev->regmap_config.ranges = regmap_range_cfg, |
diff --git a/drivers/media/dvb-frontends/rtl2832_priv.h b/drivers/media/dvb-frontends/rtl2832_priv.h index d8f97d14f6fd..c1a8a69e9015 100644 --- a/drivers/media/dvb-frontends/rtl2832_priv.h +++ b/drivers/media/dvb-frontends/rtl2832_priv.h | |||
@@ -33,7 +33,6 @@ | |||
33 | struct rtl2832_dev { | 33 | struct rtl2832_dev { |
34 | struct rtl2832_platform_data *pdata; | 34 | struct rtl2832_platform_data *pdata; |
35 | struct i2c_client *client; | 35 | struct i2c_client *client; |
36 | struct mutex regmap_mutex; | ||
37 | struct regmap_config regmap_config; | 36 | struct regmap_config regmap_config; |
38 | struct regmap *regmap; | 37 | struct regmap *regmap; |
39 | struct i2c_mux_core *muxc; | 38 | struct i2c_mux_core *muxc; |