aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mfd/wm5110-tables.c69
1 files changed, 65 insertions, 4 deletions
diff --git a/drivers/mfd/wm5110-tables.c b/drivers/mfd/wm5110-tables.c
index 3113e39b318e..4430404471c0 100644
--- a/drivers/mfd/wm5110-tables.c
+++ b/drivers/mfd/wm5110-tables.c
@@ -14,6 +14,7 @@
14 14
15#include <linux/mfd/arizona/core.h> 15#include <linux/mfd/arizona/core.h>
16#include <linux/mfd/arizona/registers.h> 16#include <linux/mfd/arizona/registers.h>
17#include <linux/device.h>
17 18
18#include "arizona.h" 19#include "arizona.h"
19 20
@@ -1336,6 +1337,64 @@ static const struct reg_default wm5110_reg_default[] = {
1336 { 0x00001404, 0x0000 }, /* R5124 - DSP4 Status 1 */ 1337 { 0x00001404, 0x0000 }, /* R5124 - DSP4 Status 1 */
1337}; 1338};
1338 1339
1340static bool wm5110_is_rev_b_adsp_memory(unsigned int reg)
1341{
1342 if ((reg >= 0x100000 && reg < 0x103000) ||
1343 (reg >= 0x180000 && reg < 0x181000) ||
1344 (reg >= 0x190000 && reg < 0x192000) ||
1345 (reg >= 0x1a8000 && reg < 0x1a9000) ||
1346 (reg >= 0x200000 && reg < 0x209000) ||
1347 (reg >= 0x280000 && reg < 0x281000) ||
1348 (reg >= 0x290000 && reg < 0x29a000) ||
1349 (reg >= 0x2a8000 && reg < 0x2aa000) ||
1350 (reg >= 0x300000 && reg < 0x30f000) ||
1351 (reg >= 0x380000 && reg < 0x382000) ||
1352 (reg >= 0x390000 && reg < 0x39e000) ||
1353 (reg >= 0x3a8000 && reg < 0x3b6000) ||
1354 (reg >= 0x400000 && reg < 0x403000) ||
1355 (reg >= 0x480000 && reg < 0x481000) ||
1356 (reg >= 0x490000 && reg < 0x492000) ||
1357 (reg >= 0x4a8000 && reg < 0x4a9000))
1358 return true;
1359 else
1360 return false;
1361}
1362
1363static bool wm5110_is_rev_d_adsp_memory(unsigned int reg)
1364{
1365 if ((reg >= 0x100000 && reg < 0x106000) ||
1366 (reg >= 0x180000 && reg < 0x182000) ||
1367 (reg >= 0x190000 && reg < 0x198000) ||
1368 (reg >= 0x1a8000 && reg < 0x1aa000) ||
1369 (reg >= 0x200000 && reg < 0x20f000) ||
1370 (reg >= 0x280000 && reg < 0x282000) ||
1371 (reg >= 0x290000 && reg < 0x29c000) ||
1372 (reg >= 0x2a6000 && reg < 0x2b4000) ||
1373 (reg >= 0x300000 && reg < 0x30f000) ||
1374 (reg >= 0x380000 && reg < 0x382000) ||
1375 (reg >= 0x390000 && reg < 0x3a2000) ||
1376 (reg >= 0x3a6000 && reg < 0x3b4000) ||
1377 (reg >= 0x400000 && reg < 0x406000) ||
1378 (reg >= 0x480000 && reg < 0x482000) ||
1379 (reg >= 0x490000 && reg < 0x498000) ||
1380 (reg >= 0x4a8000 && reg < 0x4aa000))
1381 return true;
1382 else
1383 return false;
1384}
1385
1386static bool wm5110_is_adsp_memory(struct device *dev, unsigned int reg)
1387{
1388 struct arizona *arizona = dev_get_drvdata(dev);
1389
1390 switch (arizona->rev) {
1391 case 0 ... 2:
1392 return wm5110_is_rev_b_adsp_memory(reg);
1393 default:
1394 return wm5110_is_rev_d_adsp_memory(reg);
1395 }
1396}
1397
1339static bool wm5110_readable_register(struct device *dev, unsigned int reg) 1398static bool wm5110_readable_register(struct device *dev, unsigned int reg)
1340{ 1399{
1341 switch (reg) { 1400 switch (reg) {
@@ -2308,7 +2367,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
2308 case ARIZONA_DSP4_STATUS_3: 2367 case ARIZONA_DSP4_STATUS_3:
2309 return true; 2368 return true;
2310 default: 2369 default:
2311 return false; 2370 return wm5110_is_adsp_memory(dev, reg);
2312 } 2371 }
2313} 2372}
2314 2373
@@ -2368,16 +2427,18 @@ static bool wm5110_volatile_register(struct device *dev, unsigned int reg)
2368 case ARIZONA_DSP4_STATUS_3: 2427 case ARIZONA_DSP4_STATUS_3:
2369 return true; 2428 return true;
2370 default: 2429 default:
2371 return false; 2430 return wm5110_is_adsp_memory(dev, reg);
2372 } 2431 }
2373} 2432}
2374 2433
2434#define WM5110_MAX_REGISTER 0x4a9fff
2435
2375const struct regmap_config wm5110_spi_regmap = { 2436const struct regmap_config wm5110_spi_regmap = {
2376 .reg_bits = 32, 2437 .reg_bits = 32,
2377 .pad_bits = 16, 2438 .pad_bits = 16,
2378 .val_bits = 16, 2439 .val_bits = 16,
2379 2440
2380 .max_register = ARIZONA_DSP1_STATUS_2, 2441 .max_register = WM5110_MAX_REGISTER,
2381 .readable_reg = wm5110_readable_register, 2442 .readable_reg = wm5110_readable_register,
2382 .volatile_reg = wm5110_volatile_register, 2443 .volatile_reg = wm5110_volatile_register,
2383 2444
@@ -2391,7 +2452,7 @@ const struct regmap_config wm5110_i2c_regmap = {
2391 .reg_bits = 32, 2452 .reg_bits = 32,
2392 .val_bits = 16, 2453 .val_bits = 16,
2393 2454
2394 .max_register = ARIZONA_DSP1_STATUS_2, 2455 .max_register = WM5110_MAX_REGISTER,
2395 .readable_reg = wm5110_readable_register, 2456 .readable_reg = wm5110_readable_register,
2396 .volatile_reg = wm5110_volatile_register, 2457 .volatile_reg = wm5110_volatile_register,
2397 2458