diff mbox

[RFC,07/24] x86/thinkpad_acpi: Use arch_nvram_ops methods instead of nvram_read_byte() and nvram_write_byte()

Message ID 20150531010134.129479218@telegraphics.com.au (mailing list archive)
State Superseded
Headers show

Commit Message

Finn Thain May 31, 2015, 1:01 a.m. UTC
Make use of arch_nvram_ops in the thinkpad_acpi driver so that the
nvram_* function exports can be removed.

This patch series was tested on a ThinkPad T43.

Signed-off-by: Finn Thain <fthain@telegraphics.com.au>

---
 drivers/platform/x86/thinkpad_acpi.c |   20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

Comments

Henrique de Moraes Holschuh May 31, 2015, 4:11 a.m. UTC | #1
On Sun, 31 May 2015, Finn Thain wrote:
> Make use of arch_nvram_ops in the thinkpad_acpi driver so that the
> nvram_* function exports can be removed.
> 
> This patch series was tested on a ThinkPad T43.

Can you describe how you did the testing?  A specific procedure is required
to test the hotkey NVRAM polling codepaths (which will read several NVRAM
bytes @10Hz by default) in a T43...

> Signed-off-by: Finn Thain <fthain@telegraphics.com.au>

The patch looks correct, so I don't expect any problems.

Provided that your test procedure did enable hotkey NVRAM polling in the T43
and your hotkeys all still worked fine, you have my Acked-by.

> ---
>  drivers/platform/x86/thinkpad_acpi.c |   20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> Index: linux/drivers/platform/x86/thinkpad_acpi.c
> ===================================================================
> --- linux.orig/drivers/platform/x86/thinkpad_acpi.c	2015-05-31 11:00:59.000000000 +1000
> +++ linux/drivers/platform/x86/thinkpad_acpi.c	2015-05-31 11:01:07.000000000 +1000
> @@ -2311,30 +2311,30 @@ static void hotkey_read_nvram(struct tp_
>  	u8 d;
>  
>  	if (m & TP_NVRAM_HKEY_GROUP_HK2) {
> -		d = nvram_read_byte(TP_NVRAM_ADDR_HK2);
> +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_HK2);
>  		n->thinkpad_toggle = !!(d & TP_NVRAM_MASK_HKT_THINKPAD);
>  		n->zoom_toggle = !!(d & TP_NVRAM_MASK_HKT_ZOOM);
>  		n->display_toggle = !!(d & TP_NVRAM_MASK_HKT_DISPLAY);
>  		n->hibernate_toggle = !!(d & TP_NVRAM_MASK_HKT_HIBERNATE);
>  	}
>  	if (m & TP_ACPI_HKEY_THNKLGHT_MASK) {
> -		d = nvram_read_byte(TP_NVRAM_ADDR_THINKLIGHT);
> +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_THINKLIGHT);
>  		n->thinklight_toggle = !!(d & TP_NVRAM_MASK_THINKLIGHT);
>  	}
>  	if (m & TP_ACPI_HKEY_DISPXPAND_MASK) {
> -		d = nvram_read_byte(TP_NVRAM_ADDR_VIDEO);
> +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_VIDEO);
>  		n->displayexp_toggle =
>  				!!(d & TP_NVRAM_MASK_HKT_DISPEXPND);
>  	}
>  	if (m & TP_NVRAM_HKEY_GROUP_BRIGHTNESS) {
> -		d = nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
> +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
>  		n->brightness_level = (d & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
>  				>> TP_NVRAM_POS_LEVEL_BRIGHTNESS;
>  		n->brightness_toggle =
>  				!!(d & TP_NVRAM_MASK_HKT_BRIGHTNESS);
>  	}
>  	if (m & TP_NVRAM_HKEY_GROUP_VOLUME) {
> -		d = nvram_read_byte(TP_NVRAM_ADDR_MIXER);
> +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_MIXER);
>  		n->volume_level = (d & TP_NVRAM_MASK_LEVEL_VOLUME)
>  				>> TP_NVRAM_POS_LEVEL_VOLUME;
>  		n->mute = !!(d & TP_NVRAM_MASK_MUTE);
> @@ -6153,7 +6153,7 @@ static unsigned int tpacpi_brightness_nv
>  {
>  	u8 lnvram;
>  
> -	lnvram = (nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS)
> +	lnvram = (arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS)
>  		  & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
>  		  >> TP_NVRAM_POS_LEVEL_BRIGHTNESS;
>  	lnvram &= bright_maxlvl;
> @@ -6178,7 +6178,7 @@ static void tpacpi_brightness_checkpoint
>  	if (unlikely(!acpi_ec_read(TP_EC_BACKLIGHT, &lec)))
>  		goto unlock;
>  	lec &= TP_EC_BACKLIGHT_LVLMSK;
> -	b_nvram = nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
> +	b_nvram = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
>  
>  	if (lec != ((b_nvram & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
>  			     >> TP_NVRAM_POS_LEVEL_BRIGHTNESS)) {
> @@ -6186,7 +6186,7 @@ static void tpacpi_brightness_checkpoint
>  		b_nvram &= ~(TP_NVRAM_MASK_LEVEL_BRIGHTNESS <<
>  				TP_NVRAM_POS_LEVEL_BRIGHTNESS);
>  		b_nvram |= lec;
> -		nvram_write_byte(b_nvram, TP_NVRAM_ADDR_BRIGHTNESS);
> +		arch_nvram_ops.write_byte(b_nvram, TP_NVRAM_ADDR_BRIGHTNESS);
>  		dbg_printk(TPACPI_DBG_BRGHT,
>  			   "updated NVRAM backlight level to %u (0x%02x)\n",
>  			   (unsigned int) lec, (unsigned int) b_nvram);
> @@ -6794,13 +6794,13 @@ static void tpacpi_volume_checkpoint_nvr
>  	if (unlikely(!acpi_ec_read(TP_EC_AUDIO, &lec)))
>  		goto unlock;
>  	lec &= ec_mask;
> -	b_nvram = nvram_read_byte(TP_NVRAM_ADDR_MIXER);
> +	b_nvram = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_MIXER);
>  
>  	if (lec != (b_nvram & ec_mask)) {
>  		/* NVRAM needs update */
>  		b_nvram &= ~ec_mask;
>  		b_nvram |= lec;
> -		nvram_write_byte(b_nvram, TP_NVRAM_ADDR_MIXER);
> +		arch_nvram_ops.write_byte(b_nvram, TP_NVRAM_ADDR_MIXER);
>  		dbg_printk(TPACPI_DBG_MIXER,
>  			   "updated NVRAM mixer status to 0x%02x (0x%02x)\n",
>  			   (unsigned int) lec, (unsigned int) b_nvram);
> 
>
Finn Thain May 31, 2015, 6:15 a.m. UTC | #2
On Sun, 31 May 2015, Henrique de Moraes Holschuh wrote:

> On Sun, 31 May 2015, Finn Thain wrote:
> > Make use of arch_nvram_ops in the thinkpad_acpi driver so that the 
> > nvram_* function exports can be removed.
> > 
> > This patch series was tested on a ThinkPad T43.
> 
> Can you describe how you did the testing?  A specific procedure is 
> required to test the hotkey NVRAM polling codepaths (which will read 
> several NVRAM bytes @10Hz by default) in a T43...
> 
> > Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
> 
> The patch looks correct, so I don't expect any problems.
> 
> Provided that your test procedure did enable hotkey NVRAM polling in the 
> T43 and your hotkeys all still worked fine, you have my Acked-by.

The procedure I used was this,

1. $ xev
2. # rmmod thinkpad_acpi
3. Press <Access IBM> key and confirm that xev does not report any
   events.
4. # modprobe thinkpad_acpi
5. Press <Access IBM> key and confirm that xev now reports the key press 
   events.

Is this sufficient?

Regards,
Finn

> 
> > ---
> >  drivers/platform/x86/thinkpad_acpi.c |   20 ++++++++++----------
> >  1 file changed, 10 insertions(+), 10 deletions(-)
> > 
> > Index: linux/drivers/platform/x86/thinkpad_acpi.c
> > ===================================================================
> > --- linux.orig/drivers/platform/x86/thinkpad_acpi.c	2015-05-31 11:00:59.000000000 +1000
> > +++ linux/drivers/platform/x86/thinkpad_acpi.c	2015-05-31 11:01:07.000000000 +1000
> > @@ -2311,30 +2311,30 @@ static void hotkey_read_nvram(struct tp_
> >  	u8 d;
> >  
> >  	if (m & TP_NVRAM_HKEY_GROUP_HK2) {
> > -		d = nvram_read_byte(TP_NVRAM_ADDR_HK2);
> > +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_HK2);
> >  		n->thinkpad_toggle = !!(d & TP_NVRAM_MASK_HKT_THINKPAD);
> >  		n->zoom_toggle = !!(d & TP_NVRAM_MASK_HKT_ZOOM);
> >  		n->display_toggle = !!(d & TP_NVRAM_MASK_HKT_DISPLAY);
> >  		n->hibernate_toggle = !!(d & TP_NVRAM_MASK_HKT_HIBERNATE);
> >  	}
> >  	if (m & TP_ACPI_HKEY_THNKLGHT_MASK) {
> > -		d = nvram_read_byte(TP_NVRAM_ADDR_THINKLIGHT);
> > +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_THINKLIGHT);
> >  		n->thinklight_toggle = !!(d & TP_NVRAM_MASK_THINKLIGHT);
> >  	}
> >  	if (m & TP_ACPI_HKEY_DISPXPAND_MASK) {
> > -		d = nvram_read_byte(TP_NVRAM_ADDR_VIDEO);
> > +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_VIDEO);
> >  		n->displayexp_toggle =
> >  				!!(d & TP_NVRAM_MASK_HKT_DISPEXPND);
> >  	}
> >  	if (m & TP_NVRAM_HKEY_GROUP_BRIGHTNESS) {
> > -		d = nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
> > +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
> >  		n->brightness_level = (d & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
> >  				>> TP_NVRAM_POS_LEVEL_BRIGHTNESS;
> >  		n->brightness_toggle =
> >  				!!(d & TP_NVRAM_MASK_HKT_BRIGHTNESS);
> >  	}
> >  	if (m & TP_NVRAM_HKEY_GROUP_VOLUME) {
> > -		d = nvram_read_byte(TP_NVRAM_ADDR_MIXER);
> > +		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_MIXER);
> >  		n->volume_level = (d & TP_NVRAM_MASK_LEVEL_VOLUME)
> >  				>> TP_NVRAM_POS_LEVEL_VOLUME;
> >  		n->mute = !!(d & TP_NVRAM_MASK_MUTE);
> > @@ -6153,7 +6153,7 @@ static unsigned int tpacpi_brightness_nv
> >  {
> >  	u8 lnvram;
> >  
> > -	lnvram = (nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS)
> > +	lnvram = (arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS)
> >  		  & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
> >  		  >> TP_NVRAM_POS_LEVEL_BRIGHTNESS;
> >  	lnvram &= bright_maxlvl;
> > @@ -6178,7 +6178,7 @@ static void tpacpi_brightness_checkpoint
> >  	if (unlikely(!acpi_ec_read(TP_EC_BACKLIGHT, &lec)))
> >  		goto unlock;
> >  	lec &= TP_EC_BACKLIGHT_LVLMSK;
> > -	b_nvram = nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
> > +	b_nvram = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
> >  
> >  	if (lec != ((b_nvram & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
> >  			     >> TP_NVRAM_POS_LEVEL_BRIGHTNESS)) {
> > @@ -6186,7 +6186,7 @@ static void tpacpi_brightness_checkpoint
> >  		b_nvram &= ~(TP_NVRAM_MASK_LEVEL_BRIGHTNESS <<
> >  				TP_NVRAM_POS_LEVEL_BRIGHTNESS);
> >  		b_nvram |= lec;
> > -		nvram_write_byte(b_nvram, TP_NVRAM_ADDR_BRIGHTNESS);
> > +		arch_nvram_ops.write_byte(b_nvram, TP_NVRAM_ADDR_BRIGHTNESS);
> >  		dbg_printk(TPACPI_DBG_BRGHT,
> >  			   "updated NVRAM backlight level to %u (0x%02x)\n",
> >  			   (unsigned int) lec, (unsigned int) b_nvram);
> > @@ -6794,13 +6794,13 @@ static void tpacpi_volume_checkpoint_nvr
> >  	if (unlikely(!acpi_ec_read(TP_EC_AUDIO, &lec)))
> >  		goto unlock;
> >  	lec &= ec_mask;
> > -	b_nvram = nvram_read_byte(TP_NVRAM_ADDR_MIXER);
> > +	b_nvram = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_MIXER);
> >  
> >  	if (lec != (b_nvram & ec_mask)) {
> >  		/* NVRAM needs update */
> >  		b_nvram &= ~ec_mask;
> >  		b_nvram |= lec;
> > -		nvram_write_byte(b_nvram, TP_NVRAM_ADDR_MIXER);
> > +		arch_nvram_ops.write_byte(b_nvram, TP_NVRAM_ADDR_MIXER);
> >  		dbg_printk(TPACPI_DBG_MIXER,
> >  			   "updated NVRAM mixer status to 0x%02x (0x%02x)\n",
> >  			   (unsigned int) lec, (unsigned int) b_nvram);
> > 
> > 
> 
>
Henrique de Moraes Holschuh May 31, 2015, 2:34 p.m. UTC | #3
On Sun, 31 May 2015, Finn Thain wrote:
> On Sun, 31 May 2015, Henrique de Moraes Holschuh wrote:
> > On Sun, 31 May 2015, Finn Thain wrote:
> > > Make use of arch_nvram_ops in the thinkpad_acpi driver so that the 
> > > nvram_* function exports can be removed.
> > > 
> > > This patch series was tested on a ThinkPad T43.
> > 
> > Can you describe how you did the testing?  A specific procedure is 
> > required to test the hotkey NVRAM polling codepaths (which will read 
> > several NVRAM bytes @10Hz by default) in a T43...
> > 
> > > Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
> > 
> > The patch looks correct, so I don't expect any problems.
> > 
> > Provided that your test procedure did enable hotkey NVRAM polling in the 
> > T43 and your hotkeys all still worked fine, you have my Acked-by.
> 
> The procedure I used was this,
> 
> 1. $ xev
> 2. # rmmod thinkpad_acpi
> 3. Press <Access IBM> key and confirm that xev does not report any
>    events.
> 4. # modprobe thinkpad_acpi
> 5. Press <Access IBM> key and confirm that xev now reports the key press 
>    events.
> 
> Is this sufficient?

No.  Please try:

modprobe thinkpad_acpi
echo 0xfb88c0 > /sys/devices/platform/thinkpad_acpi/hotkey_source_mask

test the hotkeys.  Please test several of them, as not all of them are
available through NVRAM polling... at least Fn+SPACE, Fn+F1..FN+F12

Please test the brightness keys. In the T43 we use "direct EC mode", which
depends on the NVRAM to sync with the SMBIOS firmware.

to reset the driver to normal mode, it is enough to do this:
echo 0 > /sys/devices/platform/thinkpad_acpi/hotkey_source_mask
Henrique de Moraes Holschuh June 2, 2015, 10:09 a.m. UTC | #4
Test results were sent to me privately, and they are correct, so...

Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>

On Sun, May 31, 2015, at 11:34, Henrique de Moraes Holschuh wrote:
> On Sun, 31 May 2015, Finn Thain wrote:
> > On Sun, 31 May 2015, Henrique de Moraes Holschuh wrote:
> > > On Sun, 31 May 2015, Finn Thain wrote:
> > > > Make use of arch_nvram_ops in the thinkpad_acpi driver so that the 
> > > > nvram_* function exports can be removed.
> > > > 
> > > > This patch series was tested on a ThinkPad T43.
> > > 
> > > Can you describe how you did the testing?  A specific procedure is 
> > > required to test the hotkey NVRAM polling codepaths (which will read 
> > > several NVRAM bytes @10Hz by default) in a T43...
> > > 
> > > > Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
> > > 
> > > The patch looks correct, so I don't expect any problems.
> > > 
> > > Provided that your test procedure did enable hotkey NVRAM polling in the 
> > > T43 and your hotkeys all still worked fine, you have my Acked-by.
> > 
> > The procedure I used was this,
> > 
> > 1. $ xev
> > 2. # rmmod thinkpad_acpi
> > 3. Press <Access IBM> key and confirm that xev does not report any
> >    events.
> > 4. # modprobe thinkpad_acpi
> > 5. Press <Access IBM> key and confirm that xev now reports the key press 
> >    events.
> > 
> > Is this sufficient?
> 
> No.  Please try:
> 
> modprobe thinkpad_acpi
> echo 0xfb88c0 > /sys/devices/platform/thinkpad_acpi/hotkey_source_mask
> 
> test the hotkeys.  Please test several of them, as not all of them are
> available through NVRAM polling... at least Fn+SPACE, Fn+F1..FN+F12
> 
> Please test the brightness keys. In the T43 we use "direct EC mode",
> which
> depends on the NVRAM to sync with the SMBIOS firmware.
> 
> to reset the driver to normal mode, it is enough to do this:
> echo 0 > /sys/devices/platform/thinkpad_acpi/hotkey_source_mask
Darren Hart June 3, 2015, 3:34 a.m. UTC | #5
On Tue, Jun 02, 2015 at 07:09:28AM -0300, Henrique de Moraes Holschuh wrote:
> Test results were sent to me privately, and they are correct, so...
> 

Finn, unless there is some compelling reason not to - like they are MBs worth of
data, please submit these to the list in the future so we have them for
reference.

> Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>

I'm fine with the changes, but they need to be submitted with the other changes
as this one change cannot compile independently in my tree.

Finn, please work with whomever is pulling the series to include this in their
pull request.

Reviewed-by: Darren Hart <dvhart@linux.intel.com>
Finn Thain June 3, 2015, 7:38 a.m. UTC | #6
On Tue, 2 Jun 2015, Darren Hart wrote:

> On Tue, Jun 02, 2015 at 07:09:28AM -0300, Henrique de Moraes Holschuh 
> wrote:
> > Test results were sent to me privately, and they are correct, so...
> > 
> 
> Finn, unless there is some compelling reason not to - like they are MBs 
> worth of data, please submit these to the list in the future so we have 
> them for reference.

Sure. Those results were just confirmation that this patch series doesn't 
affect input events read directly from 
/dev/input/by-path/platform-thinkpad_acpi-event
given the the hotkey_source_mask settings discussed in this thread.

> 
> > Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
> 
> I'm fine with the changes, but they need to be submitted with the other 
> changes as this one change cannot compile independently in my tree.
> 
> Finn, please work with whomever is pulling the series to include this in 
> their pull request.

Right.

> 
> Reviewed-by: Darren Hart <dvhart@linux.intel.com>

Thanks for your review.
Henrique de Moraes Holschuh June 3, 2015, 10:37 a.m. UTC | #7
On Wed, Jun 3, 2015, at 00:34, Darren Hart wrote:
> On Tue, Jun 02, 2015 at 07:09:28AM -0300, Henrique de Moraes Holschuh
> wrote:
> > Test results were sent to me privately, and they are correct, so...
> 
> Finn, unless there is some compelling reason not to - like they are MBs
> worth of
> data, please submit these to the list in the future so we have them for
> reference.

After I told him which exact bitmask to use on a T43 to test
hotkey_source_mask, his test results can be summarized as "I could see
no difference in behavior", which is *exactly* what I expected to
happen.

If anything went wrong with the thinkpad-acpi NVRAM code, you'd notice a
very large change in behavior (typical: hotkeys don't work, less
typical: random hotkey keypresses, hotkey press bursts, low responsivity
of hotkeys).

> > Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
> 
> I'm fine with the changes, but they need to be submitted with the other
> changes
> as this one change cannot compile independently in my tree.
> 
> Finn, please work with whomever is pulling the series to include this in
> their
> pull request.
> 
> Reviewed-by: Darren Hart <dvhart@linux.intel.com>
Darren Hart June 4, 2015, 5:14 a.m. UTC | #8
On Wed, Jun 03, 2015 at 07:37:13AM -0300, Henrique de Moraes Holschuh wrote:
> On Wed, Jun 3, 2015, at 00:34, Darren Hart wrote:
> > On Tue, Jun 02, 2015 at 07:09:28AM -0300, Henrique de Moraes Holschuh
> > wrote:
> > > Test results were sent to me privately, and they are correct, so...
> > 
> > Finn, unless there is some compelling reason not to - like they are MBs
> > worth of
> > data, please submit these to the list in the future so we have them for
> > reference.
> 
> After I told him which exact bitmask to use on a T43 to test
> hotkey_source_mask, his test results can be summarized as "I could see
> no difference in behavior", which is *exactly* what I expected to
> happen.
> 
> If anything went wrong with the thinkpad-acpi NVRAM code, you'd notice a
> very large change in behavior (typical: hotkeys don't work, less
> typical: random hotkey keypresses, hotkey press bursts, low responsivity
> of hotkeys).

Perfect, thanks for the update so we have it recorded here on the list.
diff mbox

Patch

Index: linux/drivers/platform/x86/thinkpad_acpi.c
===================================================================
--- linux.orig/drivers/platform/x86/thinkpad_acpi.c	2015-05-31 11:00:59.000000000 +1000
+++ linux/drivers/platform/x86/thinkpad_acpi.c	2015-05-31 11:01:07.000000000 +1000
@@ -2311,30 +2311,30 @@  static void hotkey_read_nvram(struct tp_
 	u8 d;
 
 	if (m & TP_NVRAM_HKEY_GROUP_HK2) {
-		d = nvram_read_byte(TP_NVRAM_ADDR_HK2);
+		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_HK2);
 		n->thinkpad_toggle = !!(d & TP_NVRAM_MASK_HKT_THINKPAD);
 		n->zoom_toggle = !!(d & TP_NVRAM_MASK_HKT_ZOOM);
 		n->display_toggle = !!(d & TP_NVRAM_MASK_HKT_DISPLAY);
 		n->hibernate_toggle = !!(d & TP_NVRAM_MASK_HKT_HIBERNATE);
 	}
 	if (m & TP_ACPI_HKEY_THNKLGHT_MASK) {
-		d = nvram_read_byte(TP_NVRAM_ADDR_THINKLIGHT);
+		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_THINKLIGHT);
 		n->thinklight_toggle = !!(d & TP_NVRAM_MASK_THINKLIGHT);
 	}
 	if (m & TP_ACPI_HKEY_DISPXPAND_MASK) {
-		d = nvram_read_byte(TP_NVRAM_ADDR_VIDEO);
+		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_VIDEO);
 		n->displayexp_toggle =
 				!!(d & TP_NVRAM_MASK_HKT_DISPEXPND);
 	}
 	if (m & TP_NVRAM_HKEY_GROUP_BRIGHTNESS) {
-		d = nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
+		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
 		n->brightness_level = (d & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
 				>> TP_NVRAM_POS_LEVEL_BRIGHTNESS;
 		n->brightness_toggle =
 				!!(d & TP_NVRAM_MASK_HKT_BRIGHTNESS);
 	}
 	if (m & TP_NVRAM_HKEY_GROUP_VOLUME) {
-		d = nvram_read_byte(TP_NVRAM_ADDR_MIXER);
+		d = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_MIXER);
 		n->volume_level = (d & TP_NVRAM_MASK_LEVEL_VOLUME)
 				>> TP_NVRAM_POS_LEVEL_VOLUME;
 		n->mute = !!(d & TP_NVRAM_MASK_MUTE);
@@ -6153,7 +6153,7 @@  static unsigned int tpacpi_brightness_nv
 {
 	u8 lnvram;
 
-	lnvram = (nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS)
+	lnvram = (arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS)
 		  & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
 		  >> TP_NVRAM_POS_LEVEL_BRIGHTNESS;
 	lnvram &= bright_maxlvl;
@@ -6178,7 +6178,7 @@  static void tpacpi_brightness_checkpoint
 	if (unlikely(!acpi_ec_read(TP_EC_BACKLIGHT, &lec)))
 		goto unlock;
 	lec &= TP_EC_BACKLIGHT_LVLMSK;
-	b_nvram = nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
+	b_nvram = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_BRIGHTNESS);
 
 	if (lec != ((b_nvram & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
 			     >> TP_NVRAM_POS_LEVEL_BRIGHTNESS)) {
@@ -6186,7 +6186,7 @@  static void tpacpi_brightness_checkpoint
 		b_nvram &= ~(TP_NVRAM_MASK_LEVEL_BRIGHTNESS <<
 				TP_NVRAM_POS_LEVEL_BRIGHTNESS);
 		b_nvram |= lec;
-		nvram_write_byte(b_nvram, TP_NVRAM_ADDR_BRIGHTNESS);
+		arch_nvram_ops.write_byte(b_nvram, TP_NVRAM_ADDR_BRIGHTNESS);
 		dbg_printk(TPACPI_DBG_BRGHT,
 			   "updated NVRAM backlight level to %u (0x%02x)\n",
 			   (unsigned int) lec, (unsigned int) b_nvram);
@@ -6794,13 +6794,13 @@  static void tpacpi_volume_checkpoint_nvr
 	if (unlikely(!acpi_ec_read(TP_EC_AUDIO, &lec)))
 		goto unlock;
 	lec &= ec_mask;
-	b_nvram = nvram_read_byte(TP_NVRAM_ADDR_MIXER);
+	b_nvram = arch_nvram_ops.read_byte(TP_NVRAM_ADDR_MIXER);
 
 	if (lec != (b_nvram & ec_mask)) {
 		/* NVRAM needs update */
 		b_nvram &= ~ec_mask;
 		b_nvram |= lec;
-		nvram_write_byte(b_nvram, TP_NVRAM_ADDR_MIXER);
+		arch_nvram_ops.write_byte(b_nvram, TP_NVRAM_ADDR_MIXER);
 		dbg_printk(TPACPI_DBG_MIXER,
 			   "updated NVRAM mixer status to 0x%02x (0x%02x)\n",
 			   (unsigned int) lec, (unsigned int) b_nvram);