@@ -1559,40 +1559,24 @@ static int _regmap_select_page(struct regmap *map, unsigned int *reg,
15591559 return - EINVAL ;
15601560 }
15611561
1562- /*
1563- * It is possible to have selector register inside data window.
1564- * In that case, selector register is located on every page and it
1565- * needs no page switching, when accessed alone.
1566- *
1567- * Nevertheless we should synchronize the cache values for it.
1568- */
1562+ /* It is possible to have selector register inside data window.
1563+ In that case, selector register is located on every page and
1564+ it needs no page switching, when accessed alone. */
15691565 if (val_num > 1 ||
15701566 range -> window_start + win_offset != range -> selector_reg ) {
1571- unsigned int page_off = win_page * range -> window_len ;
1572- unsigned int sel_offset = range -> selector_reg - range -> window_start ;
1573- unsigned int sel_register = range -> range_min + page_off + sel_offset ;
1574- unsigned int val = win_page << range -> selector_shift ;
1575- unsigned int mask = range -> selector_mask ;
1576-
15771567 /* Use separate work_buf during page switching */
15781568 orig_work_buf = map -> work_buf ;
15791569 map -> work_buf = map -> selector_work_buf ;
15801570
1581- ret = _regmap_update_bits (map , range -> selector_reg , mask , val ,
1571+ ret = _regmap_update_bits (map , range -> selector_reg ,
1572+ range -> selector_mask ,
1573+ win_page << range -> selector_shift ,
15821574 & page_chg , false);
15831575
15841576 map -> work_buf = orig_work_buf ;
15851577
15861578 if (ret != 0 )
15871579 return ret ;
1588-
1589- /*
1590- * If selector register has been just updated, update the respective
1591- * virtual copy as well.
1592- */
1593- if (page_chg &&
1594- in_range (range -> selector_reg , range -> window_start , range -> window_len ))
1595- _regmap_update_bits (map , sel_register , mask , val , NULL , false);
15961580 }
15971581
15981582 * reg = range -> window_start + win_offset ;
0 commit comments