* Describe the setting in linear_range table.
  */
 static const struct linear_range input_current_limit_ranges[] = {
-       {
-               .min = 0,
-               .step = 32000,
-               .min_sel = 0x0,
-               .max_sel = 0x1ff,
-       },
+       LINEAR_RANGE(0, 0x0, 0x1ff, 32000),
 };
 
 /* Possible trickle, pre-charging and termination current values */
 static const struct linear_range charging_current_ranges[] = {
-       {
-               .min = 0,
-               .step = 64000,
-               .min_sel = 0x0,
-               .max_sel = 0x10,
-       }, {
-               .min = 1024000,
-               .step = 0,
-               .min_sel = 0x11,
-               .max_sel = 0x1f,
-       },
+       LINEAR_RANGE(0, 0x0, 0x10, 64000),
+       LINEAR_RANGE(1024000, 0x11, 0x1f, 0),
 };
 
 /*
  * and battery over voltage protection have same possible values
  */
 static const struct linear_range charge_voltage_regulation_ranges[] = {
-       {
-               .min = 2560000,
-               .step = 0,
-               .min_sel = 0,
-               .max_sel = 0xA0,
-       }, {
-               .min = 2560000,
-               .step = 16000,
-               .min_sel = 0xA0,
-               .max_sel = 0x4B0,
-       }, {
-               .min = 19200000,
-               .step = 0,
-               .min_sel = 0x4B0,
-               .max_sel = 0x7FF,
-       },
+       LINEAR_RANGE(2560000, 0, 0xA0, 0),
+       LINEAR_RANGE(2560000, 0xA0, 0x4B0, 16000),
+       LINEAR_RANGE(19200000, 0x4B0, 0x7FF, 0),
 };
 
 /* Possible VSYS voltage regulation values */
 static const struct linear_range vsys_voltage_regulation_ranges[] = {
-       {
-               .min = 2560000,
-               .step = 0,
-               .min_sel = 0,
-               .max_sel = 0x28,
-       }, {
-               .min = 2560000,
-               .step = 64000,
-               .min_sel = 0x28,
-               .max_sel = 0x12C,
-       }, {
-               .min = 19200000,
-               .step = 0,
-               .min_sel = 0x12C,
-               .max_sel = 0x1FF,
-       },
+       LINEAR_RANGE(2560000, 0, 0x28, 0),
+       LINEAR_RANGE(2560000, 0x28, 0x12C, 64000),
+       LINEAR_RANGE(19200000, 0x12C, 0x1FF, 0),
 };
 
 /* Possible settings for switching from trickle to pre-charging limits */
 static const struct linear_range trickle_to_pre_threshold_ranges[] = {
-       {
-               .min = 2048000,
-               .step = 0,
-               .min_sel = 0,
-               .max_sel = 0x20,
-       }, {
-               .min = 2048000,
-               .step = 64000,
-               .min_sel = 0x20,
-               .max_sel = 0x12C,
-       }, {
-               .min = 19200000,
-               .step = 0,
-               .min_sel = 0x12C,
-               .max_sel = 0x1FF
-       }
+       LINEAR_RANGE(2048000, 0, 0x20, 0),
+       LINEAR_RANGE(2048000, 0x20, 0x12C, 64000),
+       LINEAR_RANGE(19200000, 0x12C, 0x1FF, 0),
 };
 
 /* Possible current values for fast-charging constant current phase */
 static const struct linear_range fast_charge_current_ranges[] = {
-       {
-               .min = 0,
-               .step = 64000,
-               .min_sel = 0,
-               .max_sel = 0xFF,
-       }
+       LINEAR_RANGE(0, 0, 0xFF, 64000),
 };
 
 struct battery_init {