regmap.c 23 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001
  1. /*
  2. * Register map access API
  3. *
  4. * Copyright 2011 Wolfson Microelectronics plc
  5. *
  6. * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License version 2 as
  10. * published by the Free Software Foundation.
  11. */
  12. #include <linux/device.h>
  13. #include <linux/slab.h>
  14. #include <linux/export.h>
  15. #include <linux/mutex.h>
  16. #include <linux/err.h>
  17. #define CREATE_TRACE_POINTS
  18. #include <trace/events/regmap.h>
  19. #include "internal.h"
  20. bool regmap_writeable(struct regmap *map, unsigned int reg)
  21. {
  22. if (map->max_register && reg > map->max_register)
  23. return false;
  24. if (map->writeable_reg)
  25. return map->writeable_reg(map->dev, reg);
  26. return true;
  27. }
  28. bool regmap_readable(struct regmap *map, unsigned int reg)
  29. {
  30. if (map->max_register && reg > map->max_register)
  31. return false;
  32. if (map->format.format_write)
  33. return false;
  34. if (map->readable_reg)
  35. return map->readable_reg(map->dev, reg);
  36. return true;
  37. }
  38. bool regmap_volatile(struct regmap *map, unsigned int reg)
  39. {
  40. if (!regmap_readable(map, reg))
  41. return false;
  42. if (map->volatile_reg)
  43. return map->volatile_reg(map->dev, reg);
  44. return true;
  45. }
  46. bool regmap_precious(struct regmap *map, unsigned int reg)
  47. {
  48. if (!regmap_readable(map, reg))
  49. return false;
  50. if (map->precious_reg)
  51. return map->precious_reg(map->dev, reg);
  52. return false;
  53. }
  54. static bool regmap_volatile_range(struct regmap *map, unsigned int reg,
  55. unsigned int num)
  56. {
  57. unsigned int i;
  58. for (i = 0; i < num; i++)
  59. if (!regmap_volatile(map, reg + i))
  60. return false;
  61. return true;
  62. }
  63. static void regmap_format_2_6_write(struct regmap *map,
  64. unsigned int reg, unsigned int val)
  65. {
  66. u8 *out = map->work_buf;
  67. *out = (reg << 6) | val;
  68. }
  69. static void regmap_format_4_12_write(struct regmap *map,
  70. unsigned int reg, unsigned int val)
  71. {
  72. __be16 *out = map->work_buf;
  73. *out = cpu_to_be16((reg << 12) | val);
  74. }
  75. static void regmap_format_7_9_write(struct regmap *map,
  76. unsigned int reg, unsigned int val)
  77. {
  78. __be16 *out = map->work_buf;
  79. *out = cpu_to_be16((reg << 9) | val);
  80. }
  81. static void regmap_format_10_14_write(struct regmap *map,
  82. unsigned int reg, unsigned int val)
  83. {
  84. u8 *out = map->work_buf;
  85. out[2] = val;
  86. out[1] = (val >> 8) | (reg << 6);
  87. out[0] = reg >> 2;
  88. }
  89. static void regmap_format_8(void *buf, unsigned int val, unsigned int shift)
  90. {
  91. u8 *b = buf;
  92. b[0] = val << shift;
  93. }
  94. static void regmap_format_16(void *buf, unsigned int val, unsigned int shift)
  95. {
  96. __be16 *b = buf;
  97. b[0] = cpu_to_be16(val << shift);
  98. }
  99. static void regmap_format_24(void *buf, unsigned int val, unsigned int shift)
  100. {
  101. u8 *b = buf;
  102. val <<= shift;
  103. b[0] = val >> 16;
  104. b[1] = val >> 8;
  105. b[2] = val;
  106. }
  107. static void regmap_format_32(void *buf, unsigned int val, unsigned int shift)
  108. {
  109. __be32 *b = buf;
  110. b[0] = cpu_to_be32(val << shift);
  111. }
  112. static unsigned int regmap_parse_8(void *buf)
  113. {
  114. u8 *b = buf;
  115. return b[0];
  116. }
  117. static unsigned int regmap_parse_16(void *buf)
  118. {
  119. __be16 *b = buf;
  120. b[0] = be16_to_cpu(b[0]);
  121. return b[0];
  122. }
  123. static unsigned int regmap_parse_24(void *buf)
  124. {
  125. u8 *b = buf;
  126. unsigned int ret = b[2];
  127. ret |= ((unsigned int)b[1]) << 8;
  128. ret |= ((unsigned int)b[0]) << 16;
  129. return ret;
  130. }
  131. static unsigned int regmap_parse_32(void *buf)
  132. {
  133. __be32 *b = buf;
  134. b[0] = be32_to_cpu(b[0]);
  135. return b[0];
  136. }
  137. static void regmap_lock_mutex(struct regmap *map)
  138. {
  139. mutex_lock(&map->mutex);
  140. }
  141. static void regmap_unlock_mutex(struct regmap *map)
  142. {
  143. mutex_unlock(&map->mutex);
  144. }
  145. static void regmap_lock_spinlock(struct regmap *map)
  146. {
  147. spin_lock(&map->spinlock);
  148. }
  149. static void regmap_unlock_spinlock(struct regmap *map)
  150. {
  151. spin_unlock(&map->spinlock);
  152. }
  153. /**
  154. * regmap_init(): Initialise register map
  155. *
  156. * @dev: Device that will be interacted with
  157. * @bus: Bus-specific callbacks to use with device
  158. * @bus_context: Data passed to bus-specific callbacks
  159. * @config: Configuration for register map
  160. *
  161. * The return value will be an ERR_PTR() on error or a valid pointer to
  162. * a struct regmap. This function should generally not be called
  163. * directly, it should be called by bus-specific init functions.
  164. */
  165. struct regmap *regmap_init(struct device *dev,
  166. const struct regmap_bus *bus,
  167. void *bus_context,
  168. const struct regmap_config *config)
  169. {
  170. struct regmap *map;
  171. int ret = -EINVAL;
  172. if (!bus || !config)
  173. goto err;
  174. map = kzalloc(sizeof(*map), GFP_KERNEL);
  175. if (map == NULL) {
  176. ret = -ENOMEM;
  177. goto err;
  178. }
  179. if (bus->fast_io) {
  180. spin_lock_init(&map->spinlock);
  181. map->lock = regmap_lock_spinlock;
  182. map->unlock = regmap_unlock_spinlock;
  183. } else {
  184. mutex_init(&map->mutex);
  185. map->lock = regmap_lock_mutex;
  186. map->unlock = regmap_unlock_mutex;
  187. }
  188. map->format.buf_size = (config->reg_bits + config->val_bits) / 8;
  189. map->format.reg_bytes = DIV_ROUND_UP(config->reg_bits, 8);
  190. map->format.pad_bytes = config->pad_bits / 8;
  191. map->format.val_bytes = DIV_ROUND_UP(config->val_bits, 8);
  192. map->format.buf_size += map->format.pad_bytes;
  193. map->reg_shift = config->pad_bits % 8;
  194. map->dev = dev;
  195. map->bus = bus;
  196. map->bus_context = bus_context;
  197. map->max_register = config->max_register;
  198. map->writeable_reg = config->writeable_reg;
  199. map->readable_reg = config->readable_reg;
  200. map->volatile_reg = config->volatile_reg;
  201. map->precious_reg = config->precious_reg;
  202. map->cache_type = config->cache_type;
  203. if (config->read_flag_mask || config->write_flag_mask) {
  204. map->read_flag_mask = config->read_flag_mask;
  205. map->write_flag_mask = config->write_flag_mask;
  206. } else {
  207. map->read_flag_mask = bus->read_flag_mask;
  208. }
  209. switch (config->reg_bits + map->reg_shift) {
  210. case 2:
  211. switch (config->val_bits) {
  212. case 6:
  213. map->format.format_write = regmap_format_2_6_write;
  214. break;
  215. default:
  216. goto err_map;
  217. }
  218. break;
  219. case 4:
  220. switch (config->val_bits) {
  221. case 12:
  222. map->format.format_write = regmap_format_4_12_write;
  223. break;
  224. default:
  225. goto err_map;
  226. }
  227. break;
  228. case 7:
  229. switch (config->val_bits) {
  230. case 9:
  231. map->format.format_write = regmap_format_7_9_write;
  232. break;
  233. default:
  234. goto err_map;
  235. }
  236. break;
  237. case 10:
  238. switch (config->val_bits) {
  239. case 14:
  240. map->format.format_write = regmap_format_10_14_write;
  241. break;
  242. default:
  243. goto err_map;
  244. }
  245. break;
  246. case 8:
  247. map->format.format_reg = regmap_format_8;
  248. break;
  249. case 16:
  250. map->format.format_reg = regmap_format_16;
  251. break;
  252. case 32:
  253. map->format.format_reg = regmap_format_32;
  254. break;
  255. default:
  256. goto err_map;
  257. }
  258. switch (config->val_bits) {
  259. case 8:
  260. map->format.format_val = regmap_format_8;
  261. map->format.parse_val = regmap_parse_8;
  262. break;
  263. case 16:
  264. map->format.format_val = regmap_format_16;
  265. map->format.parse_val = regmap_parse_16;
  266. break;
  267. case 24:
  268. map->format.format_val = regmap_format_24;
  269. map->format.parse_val = regmap_parse_24;
  270. break;
  271. case 32:
  272. map->format.format_val = regmap_format_32;
  273. map->format.parse_val = regmap_parse_32;
  274. break;
  275. }
  276. if (!map->format.format_write &&
  277. !(map->format.format_reg && map->format.format_val))
  278. goto err_map;
  279. map->work_buf = kzalloc(map->format.buf_size, GFP_KERNEL);
  280. if (map->work_buf == NULL) {
  281. ret = -ENOMEM;
  282. goto err_map;
  283. }
  284. regmap_debugfs_init(map, config->name);
  285. ret = regcache_init(map, config);
  286. if (ret < 0)
  287. goto err_free_workbuf;
  288. return map;
  289. err_free_workbuf:
  290. kfree(map->work_buf);
  291. err_map:
  292. kfree(map);
  293. err:
  294. return ERR_PTR(ret);
  295. }
  296. EXPORT_SYMBOL_GPL(regmap_init);
  297. static void devm_regmap_release(struct device *dev, void *res)
  298. {
  299. regmap_exit(*(struct regmap **)res);
  300. }
  301. /**
  302. * devm_regmap_init(): Initialise managed register map
  303. *
  304. * @dev: Device that will be interacted with
  305. * @bus: Bus-specific callbacks to use with device
  306. * @bus_context: Data passed to bus-specific callbacks
  307. * @config: Configuration for register map
  308. *
  309. * The return value will be an ERR_PTR() on error or a valid pointer
  310. * to a struct regmap. This function should generally not be called
  311. * directly, it should be called by bus-specific init functions. The
  312. * map will be automatically freed by the device management code.
  313. */
  314. struct regmap *devm_regmap_init(struct device *dev,
  315. const struct regmap_bus *bus,
  316. void *bus_context,
  317. const struct regmap_config *config)
  318. {
  319. struct regmap **ptr, *regmap;
  320. ptr = devres_alloc(devm_regmap_release, sizeof(*ptr), GFP_KERNEL);
  321. if (!ptr)
  322. return ERR_PTR(-ENOMEM);
  323. regmap = regmap_init(dev, bus, bus_context, config);
  324. if (!IS_ERR(regmap)) {
  325. *ptr = regmap;
  326. devres_add(dev, ptr);
  327. } else {
  328. devres_free(ptr);
  329. }
  330. return regmap;
  331. }
  332. EXPORT_SYMBOL_GPL(devm_regmap_init);
  333. /**
  334. * regmap_reinit_cache(): Reinitialise the current register cache
  335. *
  336. * @map: Register map to operate on.
  337. * @config: New configuration. Only the cache data will be used.
  338. *
  339. * Discard any existing register cache for the map and initialize a
  340. * new cache. This can be used to restore the cache to defaults or to
  341. * update the cache configuration to reflect runtime discovery of the
  342. * hardware.
  343. */
  344. int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config)
  345. {
  346. int ret;
  347. map->lock(map);
  348. regcache_exit(map);
  349. regmap_debugfs_exit(map);
  350. map->max_register = config->max_register;
  351. map->writeable_reg = config->writeable_reg;
  352. map->readable_reg = config->readable_reg;
  353. map->volatile_reg = config->volatile_reg;
  354. map->precious_reg = config->precious_reg;
  355. map->cache_type = config->cache_type;
  356. regmap_debugfs_init(map, config->name);
  357. map->cache_bypass = false;
  358. map->cache_only = false;
  359. ret = regcache_init(map, config);
  360. map->unlock(map);
  361. return ret;
  362. }
  363. /**
  364. * regmap_exit(): Free a previously allocated register map
  365. */
  366. void regmap_exit(struct regmap *map)
  367. {
  368. regcache_exit(map);
  369. regmap_debugfs_exit(map);
  370. if (map->bus->free_context)
  371. map->bus->free_context(map->bus_context);
  372. kfree(map->work_buf);
  373. kfree(map);
  374. }
  375. EXPORT_SYMBOL_GPL(regmap_exit);
  376. static int _regmap_raw_write(struct regmap *map, unsigned int reg,
  377. const void *val, size_t val_len)
  378. {
  379. u8 *u8 = map->work_buf;
  380. void *buf;
  381. int ret = -ENOTSUPP;
  382. size_t len;
  383. int i;
  384. /* Check for unwritable registers before we start */
  385. if (map->writeable_reg)
  386. for (i = 0; i < val_len / map->format.val_bytes; i++)
  387. if (!map->writeable_reg(map->dev, reg + i))
  388. return -EINVAL;
  389. if (!map->cache_bypass && map->format.parse_val) {
  390. unsigned int ival;
  391. int val_bytes = map->format.val_bytes;
  392. for (i = 0; i < val_len / val_bytes; i++) {
  393. memcpy(map->work_buf, val + (i * val_bytes), val_bytes);
  394. ival = map->format.parse_val(map->work_buf);
  395. ret = regcache_write(map, reg + i, ival);
  396. if (ret) {
  397. dev_err(map->dev,
  398. "Error in caching of register: %u ret: %d\n",
  399. reg + i, ret);
  400. return ret;
  401. }
  402. }
  403. if (map->cache_only) {
  404. map->cache_dirty = true;
  405. return 0;
  406. }
  407. }
  408. map->format.format_reg(map->work_buf, reg, map->reg_shift);
  409. u8[0] |= map->write_flag_mask;
  410. trace_regmap_hw_write_start(map->dev, reg,
  411. val_len / map->format.val_bytes);
  412. /* If we're doing a single register write we can probably just
  413. * send the work_buf directly, otherwise try to do a gather
  414. * write.
  415. */
  416. if (val == (map->work_buf + map->format.pad_bytes +
  417. map->format.reg_bytes))
  418. ret = map->bus->write(map->bus_context, map->work_buf,
  419. map->format.reg_bytes +
  420. map->format.pad_bytes +
  421. val_len);
  422. else if (map->bus->gather_write)
  423. ret = map->bus->gather_write(map->bus_context, map->work_buf,
  424. map->format.reg_bytes +
  425. map->format.pad_bytes,
  426. val, val_len);
  427. /* If that didn't work fall back on linearising by hand. */
  428. if (ret == -ENOTSUPP) {
  429. len = map->format.reg_bytes + map->format.pad_bytes + val_len;
  430. buf = kzalloc(len, GFP_KERNEL);
  431. if (!buf)
  432. return -ENOMEM;
  433. memcpy(buf, map->work_buf, map->format.reg_bytes);
  434. memcpy(buf + map->format.reg_bytes + map->format.pad_bytes,
  435. val, val_len);
  436. ret = map->bus->write(map->bus_context, buf, len);
  437. kfree(buf);
  438. }
  439. trace_regmap_hw_write_done(map->dev, reg,
  440. val_len / map->format.val_bytes);
  441. return ret;
  442. }
  443. int _regmap_write(struct regmap *map, unsigned int reg,
  444. unsigned int val)
  445. {
  446. int ret;
  447. BUG_ON(!map->format.format_write && !map->format.format_val);
  448. if (!map->cache_bypass && map->format.format_write) {
  449. ret = regcache_write(map, reg, val);
  450. if (ret != 0)
  451. return ret;
  452. if (map->cache_only) {
  453. map->cache_dirty = true;
  454. return 0;
  455. }
  456. }
  457. trace_regmap_reg_write(map->dev, reg, val);
  458. if (map->format.format_write) {
  459. map->format.format_write(map, reg, val);
  460. trace_regmap_hw_write_start(map->dev, reg, 1);
  461. ret = map->bus->write(map->bus_context, map->work_buf,
  462. map->format.buf_size);
  463. trace_regmap_hw_write_done(map->dev, reg, 1);
  464. return ret;
  465. } else {
  466. map->format.format_val(map->work_buf + map->format.reg_bytes
  467. + map->format.pad_bytes, val, 0);
  468. return _regmap_raw_write(map, reg,
  469. map->work_buf +
  470. map->format.reg_bytes +
  471. map->format.pad_bytes,
  472. map->format.val_bytes);
  473. }
  474. }
  475. /**
  476. * regmap_write(): Write a value to a single register
  477. *
  478. * @map: Register map to write to
  479. * @reg: Register to write to
  480. * @val: Value to be written
  481. *
  482. * A value of zero will be returned on success, a negative errno will
  483. * be returned in error cases.
  484. */
  485. int regmap_write(struct regmap *map, unsigned int reg, unsigned int val)
  486. {
  487. int ret;
  488. map->lock(map);
  489. ret = _regmap_write(map, reg, val);
  490. map->unlock(map);
  491. return ret;
  492. }
  493. EXPORT_SYMBOL_GPL(regmap_write);
  494. /**
  495. * regmap_raw_write(): Write raw values to one or more registers
  496. *
  497. * @map: Register map to write to
  498. * @reg: Initial register to write to
  499. * @val: Block of data to be written, laid out for direct transmission to the
  500. * device
  501. * @val_len: Length of data pointed to by val.
  502. *
  503. * This function is intended to be used for things like firmware
  504. * download where a large block of data needs to be transferred to the
  505. * device. No formatting will be done on the data provided.
  506. *
  507. * A value of zero will be returned on success, a negative errno will
  508. * be returned in error cases.
  509. */
  510. int regmap_raw_write(struct regmap *map, unsigned int reg,
  511. const void *val, size_t val_len)
  512. {
  513. int ret;
  514. if (val_len % map->format.val_bytes)
  515. return -EINVAL;
  516. map->lock(map);
  517. ret = _regmap_raw_write(map, reg, val, val_len);
  518. map->unlock(map);
  519. return ret;
  520. }
  521. EXPORT_SYMBOL_GPL(regmap_raw_write);
  522. /*
  523. * regmap_bulk_write(): Write multiple registers to the device
  524. *
  525. * @map: Register map to write to
  526. * @reg: First register to be write from
  527. * @val: Block of data to be written, in native register size for device
  528. * @val_count: Number of registers to write
  529. *
  530. * This function is intended to be used for writing a large block of
  531. * data to be device either in single transfer or multiple transfer.
  532. *
  533. * A value of zero will be returned on success, a negative errno will
  534. * be returned in error cases.
  535. */
  536. int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
  537. size_t val_count)
  538. {
  539. int ret = 0, i;
  540. size_t val_bytes = map->format.val_bytes;
  541. void *wval;
  542. if (!map->format.parse_val)
  543. return -EINVAL;
  544. map->lock(map);
  545. /* No formatting is require if val_byte is 1 */
  546. if (val_bytes == 1) {
  547. wval = (void *)val;
  548. } else {
  549. wval = kmemdup(val, val_count * val_bytes, GFP_KERNEL);
  550. if (!wval) {
  551. ret = -ENOMEM;
  552. dev_err(map->dev, "Error in memory allocation\n");
  553. goto out;
  554. }
  555. for (i = 0; i < val_count * val_bytes; i += val_bytes)
  556. map->format.parse_val(wval + i);
  557. }
  558. ret = _regmap_raw_write(map, reg, wval, val_bytes * val_count);
  559. if (val_bytes != 1)
  560. kfree(wval);
  561. out:
  562. map->unlock(map);
  563. return ret;
  564. }
  565. EXPORT_SYMBOL_GPL(regmap_bulk_write);
  566. static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
  567. unsigned int val_len)
  568. {
  569. u8 *u8 = map->work_buf;
  570. int ret;
  571. map->format.format_reg(map->work_buf, reg, map->reg_shift);
  572. /*
  573. * Some buses or devices flag reads by setting the high bits in the
  574. * register addresss; since it's always the high bits for all
  575. * current formats we can do this here rather than in
  576. * formatting. This may break if we get interesting formats.
  577. */
  578. u8[0] |= map->read_flag_mask;
  579. trace_regmap_hw_read_start(map->dev, reg,
  580. val_len / map->format.val_bytes);
  581. ret = map->bus->read(map->bus_context, map->work_buf,
  582. map->format.reg_bytes + map->format.pad_bytes,
  583. val, val_len);
  584. trace_regmap_hw_read_done(map->dev, reg,
  585. val_len / map->format.val_bytes);
  586. return ret;
  587. }
  588. static int _regmap_read(struct regmap *map, unsigned int reg,
  589. unsigned int *val)
  590. {
  591. int ret;
  592. if (!map->cache_bypass) {
  593. ret = regcache_read(map, reg, val);
  594. if (ret == 0)
  595. return 0;
  596. }
  597. if (!map->format.parse_val)
  598. return -EINVAL;
  599. if (map->cache_only)
  600. return -EBUSY;
  601. ret = _regmap_raw_read(map, reg, map->work_buf, map->format.val_bytes);
  602. if (ret == 0) {
  603. *val = map->format.parse_val(map->work_buf);
  604. trace_regmap_reg_read(map->dev, reg, *val);
  605. }
  606. return ret;
  607. }
  608. /**
  609. * regmap_read(): Read a value from a single register
  610. *
  611. * @map: Register map to write to
  612. * @reg: Register to be read from
  613. * @val: Pointer to store read value
  614. *
  615. * A value of zero will be returned on success, a negative errno will
  616. * be returned in error cases.
  617. */
  618. int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val)
  619. {
  620. int ret;
  621. map->lock(map);
  622. ret = _regmap_read(map, reg, val);
  623. map->unlock(map);
  624. return ret;
  625. }
  626. EXPORT_SYMBOL_GPL(regmap_read);
  627. /**
  628. * regmap_raw_read(): Read raw data from the device
  629. *
  630. * @map: Register map to write to
  631. * @reg: First register to be read from
  632. * @val: Pointer to store read value
  633. * @val_len: Size of data to read
  634. *
  635. * A value of zero will be returned on success, a negative errno will
  636. * be returned in error cases.
  637. */
  638. int regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
  639. size_t val_len)
  640. {
  641. size_t val_bytes = map->format.val_bytes;
  642. size_t val_count = val_len / val_bytes;
  643. unsigned int v;
  644. int ret, i;
  645. if (val_len % map->format.val_bytes)
  646. return -EINVAL;
  647. map->lock(map);
  648. if (regmap_volatile_range(map, reg, val_count) || map->cache_bypass ||
  649. map->cache_type == REGCACHE_NONE) {
  650. /* Physical block read if there's no cache involved */
  651. ret = _regmap_raw_read(map, reg, val, val_len);
  652. } else {
  653. /* Otherwise go word by word for the cache; should be low
  654. * cost as we expect to hit the cache.
  655. */
  656. for (i = 0; i < val_count; i++) {
  657. ret = _regmap_read(map, reg + i, &v);
  658. if (ret != 0)
  659. goto out;
  660. map->format.format_val(val + (i * val_bytes), v, 0);
  661. }
  662. }
  663. out:
  664. map->unlock(map);
  665. return ret;
  666. }
  667. EXPORT_SYMBOL_GPL(regmap_raw_read);
  668. /**
  669. * regmap_bulk_read(): Read multiple registers from the device
  670. *
  671. * @map: Register map to write to
  672. * @reg: First register to be read from
  673. * @val: Pointer to store read value, in native register size for device
  674. * @val_count: Number of registers to read
  675. *
  676. * A value of zero will be returned on success, a negative errno will
  677. * be returned in error cases.
  678. */
  679. int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
  680. size_t val_count)
  681. {
  682. int ret, i;
  683. size_t val_bytes = map->format.val_bytes;
  684. bool vol = regmap_volatile_range(map, reg, val_count);
  685. if (!map->format.parse_val)
  686. return -EINVAL;
  687. if (vol || map->cache_type == REGCACHE_NONE) {
  688. ret = regmap_raw_read(map, reg, val, val_bytes * val_count);
  689. if (ret != 0)
  690. return ret;
  691. for (i = 0; i < val_count * val_bytes; i += val_bytes)
  692. map->format.parse_val(val + i);
  693. } else {
  694. for (i = 0; i < val_count; i++) {
  695. ret = regmap_read(map, reg + i, val + (i * val_bytes));
  696. if (ret != 0)
  697. return ret;
  698. }
  699. }
  700. return 0;
  701. }
  702. EXPORT_SYMBOL_GPL(regmap_bulk_read);
  703. static int _regmap_update_bits(struct regmap *map, unsigned int reg,
  704. unsigned int mask, unsigned int val,
  705. bool *change)
  706. {
  707. int ret;
  708. unsigned int tmp, orig;
  709. map->lock(map);
  710. ret = _regmap_read(map, reg, &orig);
  711. if (ret != 0)
  712. goto out;
  713. tmp = orig & ~mask;
  714. tmp |= val & mask;
  715. if (tmp != orig) {
  716. ret = _regmap_write(map, reg, tmp);
  717. *change = true;
  718. } else {
  719. *change = false;
  720. }
  721. out:
  722. map->unlock(map);
  723. return ret;
  724. }
  725. /**
  726. * regmap_update_bits: Perform a read/modify/write cycle on the register map
  727. *
  728. * @map: Register map to update
  729. * @reg: Register to update
  730. * @mask: Bitmask to change
  731. * @val: New value for bitmask
  732. *
  733. * Returns zero for success, a negative number on error.
  734. */
  735. int regmap_update_bits(struct regmap *map, unsigned int reg,
  736. unsigned int mask, unsigned int val)
  737. {
  738. bool change;
  739. return _regmap_update_bits(map, reg, mask, val, &change);
  740. }
  741. EXPORT_SYMBOL_GPL(regmap_update_bits);
  742. /**
  743. * regmap_update_bits_check: Perform a read/modify/write cycle on the
  744. * register map and report if updated
  745. *
  746. * @map: Register map to update
  747. * @reg: Register to update
  748. * @mask: Bitmask to change
  749. * @val: New value for bitmask
  750. * @change: Boolean indicating if a write was done
  751. *
  752. * Returns zero for success, a negative number on error.
  753. */
  754. int regmap_update_bits_check(struct regmap *map, unsigned int reg,
  755. unsigned int mask, unsigned int val,
  756. bool *change)
  757. {
  758. return _regmap_update_bits(map, reg, mask, val, change);
  759. }
  760. EXPORT_SYMBOL_GPL(regmap_update_bits_check);
  761. /**
  762. * regmap_register_patch: Register and apply register updates to be applied
  763. * on device initialistion
  764. *
  765. * @map: Register map to apply updates to.
  766. * @regs: Values to update.
  767. * @num_regs: Number of entries in regs.
  768. *
  769. * Register a set of register updates to be applied to the device
  770. * whenever the device registers are synchronised with the cache and
  771. * apply them immediately. Typically this is used to apply
  772. * corrections to be applied to the device defaults on startup, such
  773. * as the updates some vendors provide to undocumented registers.
  774. */
  775. int regmap_register_patch(struct regmap *map, const struct reg_default *regs,
  776. int num_regs)
  777. {
  778. int i, ret;
  779. bool bypass;
  780. /* If needed the implementation can be extended to support this */
  781. if (map->patch)
  782. return -EBUSY;
  783. map->lock(map);
  784. bypass = map->cache_bypass;
  785. map->cache_bypass = true;
  786. /* Write out first; it's useful to apply even if we fail later. */
  787. for (i = 0; i < num_regs; i++) {
  788. ret = _regmap_write(map, regs[i].reg, regs[i].def);
  789. if (ret != 0) {
  790. dev_err(map->dev, "Failed to write %x = %x: %d\n",
  791. regs[i].reg, regs[i].def, ret);
  792. goto out;
  793. }
  794. }
  795. map->patch = kcalloc(num_regs, sizeof(struct reg_default), GFP_KERNEL);
  796. if (map->patch != NULL) {
  797. memcpy(map->patch, regs,
  798. num_regs * sizeof(struct reg_default));
  799. map->patch_regs = num_regs;
  800. } else {
  801. ret = -ENOMEM;
  802. }
  803. out:
  804. map->cache_bypass = bypass;
  805. map->unlock(map);
  806. return ret;
  807. }
  808. EXPORT_SYMBOL_GPL(regmap_register_patch);
  809. /*
  810. * regmap_get_val_bytes(): Report the size of a register value
  811. *
  812. * Report the size of a register value, mainly intended to for use by
  813. * generic infrastructure built on top of regmap.
  814. */
  815. int regmap_get_val_bytes(struct regmap *map)
  816. {
  817. if (map->format.format_write)
  818. return -EINVAL;
  819. return map->format.val_bytes;
  820. }
  821. EXPORT_SYMBOL_GPL(regmap_get_val_bytes);
  822. static int __init regmap_initcall(void)
  823. {
  824. regmap_debugfs_initcall();
  825. return 0;
  826. }
  827. postcore_initcall(regmap_initcall);