Re: acpithinkpad(4): port-replicator hkey event

2018-05-21 Thread Mike Larkin
On Mon, May 21, 2018 at 12:55:13PM +0200, Tobias Tschinkowitz wrote:
> On Mon, May 21, 2018 at 11:56:37AM +0200, Stefan Sperling wrote:
> > On Mon, May 21, 2018 at 11:35:54AM +0200, Tobias Tschinkowitz wrote:
> > > As the last diff still had formatting issues i fixed that.
> > 
> > OK by me.
> > 
> > Nitpick: There are overlong lines here (please stay <= 80 columns).
> > 
> > > + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> > > SENSOR_S_OK;
> > 
> > > + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> > > SENSOR_S_OK;
> > 
> > 
> > These should be wrapped after = and indented according to style(9) by
> > 3 tabs + 4 spaces, i.e.:
> > 
> > sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status =
> > SENSOR_S_OK;
> > 
> 
> Fixed that, thanks for the information
> 

This delay is on me, sorry folks.

I'll get to it when I can.

-ml

> 
> Index: acpithinkpad.c
> ===
> RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
> retrieving revision 1.58
> diff -u -p -r1.58 acpithinkpad.c
> --- acpithinkpad.c12 Aug 2017 17:33:51 -  1.58
> +++ acpithinkpad.c21 May 2018 10:49:03 -
> @@ -110,9 +110,12 @@
>  #define  THINKPAD_TABLET_SCREEN_CHANGED  0x60c0
>  #define  THINKPAD_SWITCH_WIRELESS0x7000
>  
> -#define THINKPAD_NSENSORS 9
> +#define THINKPAD_NSENSORS 10
>  #define THINKPAD_NTEMPSENSORS 8
>  
> +#define THINKPAD_SENSOR_FANRPM   THINKPAD_NTEMPSENSORS
> +#define THINKPAD_SENSOR_PORTREPL THINKPAD_NTEMPSENSORS + 1
> +
>  #define THINKPAD_ECOFFSET_VOLUME 0x30
>  #define THINKPAD_ECOFFSET_VOLUME_MUTE_MASK 0x40
>  #define THINKPAD_ECOFFSET_FANLO  0x84
> @@ -233,8 +236,15 @@ thinkpad_sensor_attach(struct acpithinkp
>   }
>  
>   /* Add fan probe */
> - sc->sc_sens[i].type = SENSOR_FANRPM;
> - sensor_attach(>sc_sensdev, >sc_sens[i]);
> + sc->sc_sens[THINKPAD_SENSOR_FANRPM].type = SENSOR_FANRPM;
> + sensor_attach(>sc_sensdev, >sc_sens[THINKPAD_SENSOR_FANRPM]);
> +
> + /* Add port replicator indicator */
> + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].type = SENSOR_INDICATOR;
> + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = SENSOR_S_UNKNOWN;
> + strlcpy(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc, "port replicator",
> + sizeof(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc));
> + sensor_attach(>sc_sensdev, >sc_sens[THINKPAD_SENSOR_PORTREPL]);
>  
>   sensordev_install(>sc_sensdev);
>  }
> @@ -260,7 +270,7 @@ thinkpad_sensor_refresh(void *arg)
>   /* Read fan RPM */
>   acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANLO, 1, );
>   acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANHI, 1, );
> - sc->sc_sens[i].value = ((hi << 8L) + lo);
> + sc->sc_sens[THINKPAD_SENSOR_FANRPM].value = ((hi << 8L) + lo);
>  }
>  
>  void
> @@ -420,6 +430,16 @@ thinkpad_hotkey(struct aml_node *node, i
>   break;
>   case THINKPAD_BACKLIGHT_CHANGED:
>   thinkpad_get_brightness(sc);
> + break;
> + case THINKPAD_PORT_REPL_DOCKED:
> + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 1;
> + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> + SENSOR_S_OK;
> + break;
> + case THINKPAD_PORT_REPL_UNDOCKED:
> + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 0;
> + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> + SENSOR_S_OK;
>   break;
>   default:
>   /* unknown or boring event */
> 



Re: acpithinkpad(4): port-replicator hkey event

2018-05-21 Thread Tobias Tschinkowitz
On Mon, May 21, 2018 at 11:56:37AM +0200, Stefan Sperling wrote:
> On Mon, May 21, 2018 at 11:35:54AM +0200, Tobias Tschinkowitz wrote:
> > As the last diff still had formatting issues i fixed that.
> 
> OK by me.
> 
> Nitpick: There are overlong lines here (please stay <= 80 columns).
> 
> > +   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> > SENSOR_S_OK;
> 
> > +   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> > SENSOR_S_OK;
> 
> 
> These should be wrapped after = and indented according to style(9) by
> 3 tabs + 4 spaces, i.e.:
> 
>   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status =
>   SENSOR_S_OK;
> 

Fixed that, thanks for the information


Index: acpithinkpad.c
===
RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
retrieving revision 1.58
diff -u -p -r1.58 acpithinkpad.c
--- acpithinkpad.c  12 Aug 2017 17:33:51 -  1.58
+++ acpithinkpad.c  21 May 2018 10:49:03 -
@@ -110,9 +110,12 @@
 #defineTHINKPAD_TABLET_SCREEN_CHANGED  0x60c0
 #defineTHINKPAD_SWITCH_WIRELESS0x7000
 
-#define THINKPAD_NSENSORS 9
+#define THINKPAD_NSENSORS 10
 #define THINKPAD_NTEMPSENSORS 8
 
+#define THINKPAD_SENSOR_FANRPM THINKPAD_NTEMPSENSORS
+#define THINKPAD_SENSOR_PORTREPL   THINKPAD_NTEMPSENSORS + 1
+
 #define THINKPAD_ECOFFSET_VOLUME   0x30
 #define THINKPAD_ECOFFSET_VOLUME_MUTE_MASK 0x40
 #define THINKPAD_ECOFFSET_FANLO0x84
@@ -233,8 +236,15 @@ thinkpad_sensor_attach(struct acpithinkp
}
 
/* Add fan probe */
-   sc->sc_sens[i].type = SENSOR_FANRPM;
-   sensor_attach(>sc_sensdev, >sc_sens[i]);
+   sc->sc_sens[THINKPAD_SENSOR_FANRPM].type = SENSOR_FANRPM;
+   sensor_attach(>sc_sensdev, >sc_sens[THINKPAD_SENSOR_FANRPM]);
+
+   /* Add port replicator indicator */
+   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].type = SENSOR_INDICATOR;
+   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = SENSOR_S_UNKNOWN;
+   strlcpy(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc, "port replicator",
+   sizeof(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc));
+   sensor_attach(>sc_sensdev, >sc_sens[THINKPAD_SENSOR_PORTREPL]);
 
sensordev_install(>sc_sensdev);
 }
@@ -260,7 +270,7 @@ thinkpad_sensor_refresh(void *arg)
/* Read fan RPM */
acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANLO, 1, );
acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANHI, 1, );
-   sc->sc_sens[i].value = ((hi << 8L) + lo);
+   sc->sc_sens[THINKPAD_SENSOR_FANRPM].value = ((hi << 8L) + lo);
 }
 
 void
@@ -420,6 +430,16 @@ thinkpad_hotkey(struct aml_node *node, i
break;
case THINKPAD_BACKLIGHT_CHANGED:
thinkpad_get_brightness(sc);
+   break;
+   case THINKPAD_PORT_REPL_DOCKED:
+   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 1;
+   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
+   SENSOR_S_OK;
+   break;
+   case THINKPAD_PORT_REPL_UNDOCKED:
+   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 0;
+   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
+   SENSOR_S_OK;
break;
default:
/* unknown or boring event */



Re: acpithinkpad(4): port-replicator hkey event

2018-05-21 Thread Stefan Sperling
On Mon, May 21, 2018 at 11:35:54AM +0200, Tobias Tschinkowitz wrote:
> As the last diff still had formatting issues i fixed that.

OK by me.

Nitpick: There are overlong lines here (please stay <= 80 columns).

> + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> SENSOR_S_OK;

> + sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> SENSOR_S_OK;


These should be wrapped after = and indented according to style(9) by
3 tabs + 4 spaces, i.e.:

sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status =
SENSOR_S_OK;



Re: acpithinkpad(4): port-replicator hkey event

2018-05-21 Thread Tobias Tschinkowitz
On Sun, May 06, 2018 at 11:43:43PM +0200, Tobias Tschinkowitz wrote:
> On Sun, May 06, 2018 at 09:31:55AM -0700, Mike Larkin wrote:
> > On Fri, May 04, 2018 at 08:28:04PM +0200, Tobias Tschinkowitz wrote:
> > > Hi @tech,
> > > 
> > > i thought it would be a good idea to delegate the port-replicator
> > > docking event to the sysctl(2) hw.sensors substree so that if the
> > > thinkpad gets docked/undocked one could react to it by using
> > > sensorsd(8).
> > > 
> > > Here is my diff:
> > > 
> > 
> > Can you regenerate with proper whitespace/indenting please?
> > 
> > -ml
> > 
> > 
> > > Index: acpithinkpad.c
> > > ===
> > > RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
> > > retrieving revision 1.58
> > > diff -u -p -r1.58 acpithinkpad.c
> > > --- acpithinkpad.c  12 Aug 2017 17:33:51 -  1.58
> > > +++ acpithinkpad.c  4 May 2018 18:20:43 -
> > > @@ -110,8 +110,10 @@
> > >  #defineTHINKPAD_TABLET_SCREEN_CHANGED  0x60c0
> > >  #defineTHINKPAD_SWITCH_WIRELESS0x7000
> > > 
> > > -#define THINKPAD_NSENSORS 9
> > > +#define THINKPAD_NSENSORS 10
> > >  #define THINKPAD_NTEMPSENSORS 8
> > > +#define THINKPAD_SENSOR_FANRPM THINKPAD_NTEMPSENSORS
> > > +#define THINKPAD_SENSOR_PORTREPL   THINKPAD_NTEMPSENSORS + 1
> > > 
> > >  #define THINKPAD_ECOFFSET_VOLUME   0x30
> > >  #define THINKPAD_ECOFFSET_VOLUME_MUTE_MASK 0x40
> > > @@ -232,9 +234,18 @@ thinkpad_sensor_attach(struct acpithinkp
> > > sensor_attach(>sc_sensdev, >sc_sens[i]);
> > > }
> > > 
> > > -   /* Add fan probe */
> > > -   sc->sc_sens[i].type = SENSOR_FANRPM;
> > > -   sensor_attach(>sc_sensdev, >sc_sens[i]);
> > > +/* Add fan probe */
> > > +sc->sc_sens[THINKPAD_SENSOR_FANRPM].type = SENSOR_FANRPM;
> > > +sensor_attach(>sc_sensdev,
> > > +  >sc_sens[THINKPAD_SENSOR_FANRPM]);
> > > +
> > > +/* Add port replicator indicator */
> > > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].type = SENSOR_INDICATOR;
> > > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = SENSOR_S_UNKNOWN;
> > > +strlcpy(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc, "port 
> > > replicator",
> > > +sizeof(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc));
> > > +sensor_attach(>sc_sensdev,
> > > +  >sc_sens[THINKPAD_SENSOR_PORTREPL]);
> > > 
> > > sensordev_install(>sc_sensdev);
> > >  }
> > > @@ -260,7 +271,7 @@ thinkpad_sensor_refresh(void *arg)
> > > /* Read fan RPM */
> > > acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANLO, 1, );
> > > acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANHI, 1, );
> > > -   sc->sc_sens[i].value = ((hi << 8L) + lo);
> > > +   sc->sc_sens[THINKPAD_SENSOR_FANRPM].value = ((hi << 8L) + lo);
> > >  }
> > > 
> > >  void
> > > @@ -421,6 +432,14 @@ thinkpad_hotkey(struct aml_node *node, i
> > > case THINKPAD_BACKLIGHT_CHANGED:
> > > thinkpad_get_brightness(sc);
> > > break;
> > > +case THINKPAD_PORT_REPL_DOCKED:
> > > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 1;
> > > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> > > SENSOR_S_OK;
> > > +break;
> > > +case THINKPAD_PORT_REPL_UNDOCKED:
> > > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 0;
> > > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> > > SENSOR_S_OK;
> > > +break;
> > > default:
> > > /* unknown or boring event */
> > > DPRINTF(("%s: unhandled event 0x%03llx\n", 
> > > DEVNAME(sc),
> > > 
> > > 
> > > Greetings, Tobias
> > > 
> > 
> 
> Hi,
> 
> here is the corrected diff. I hope this one is okay.
> 
> Greetings, Tobias
> 
> Index: acpithinkpad.c
> ===
> RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
> retrieving revision 1.58
> diff -u -p -r1.58 acpithinkpad.c
> --- acpithinkpad.c12 Aug 2017 17:33:51 -  1.58
> +++ acpithinkpad.c6 May 2018 21:37:05 -
> @@ -110,9 +110,12 @@
>  #define  THINKPAD_TABLET_SCREEN_CHANGED  0x60c0
>  #define  THINKPAD_SWITCH_WIRELESS0x7000
>  
> -#define THINKPAD_NSENSORS 9
> +#define THINKPAD_NSENSORS 10
>  #define THINKPAD_NTEMPSENSORS 8
>  
> +#define THINKPAD_SENSOR_FANRPM   THINKPAD_NTEMPSENSORS
> +#define THINKPAD_SENSOR_PORTREPL THINKPAD_NTEMPSENSORS + 1
> +
>  #define THINKPAD_ECOFFSET_VOLUME 0x30
>  #define THINKPAD_ECOFFSET_VOLUME_MUTE_MASK 0x40
>  #define THINKPAD_ECOFFSET_FANLO  0x84
> @@ -233,8 +236,16 @@ thinkpad_sensor_attach(struct acpithinkp
>   }
>  
>   /* Add fan probe */
> - sc->sc_sens[i].type = SENSOR_FANRPM;

Re: acpithinkpad(4): port-replicator hkey event

2018-05-06 Thread Tobias Tschinkowitz
On Sun, May 06, 2018 at 09:31:55AM -0700, Mike Larkin wrote:
> On Fri, May 04, 2018 at 08:28:04PM +0200, Tobias Tschinkowitz wrote:
> > Hi @tech,
> > 
> > i thought it would be a good idea to delegate the port-replicator
> > docking event to the sysctl(2) hw.sensors substree so that if the
> > thinkpad gets docked/undocked one could react to it by using
> > sensorsd(8).
> > 
> > Here is my diff:
> > 
> 
> Can you regenerate with proper whitespace/indenting please?
> 
> -ml
> 
> 
> > Index: acpithinkpad.c
> > ===
> > RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
> > retrieving revision 1.58
> > diff -u -p -r1.58 acpithinkpad.c
> > --- acpithinkpad.c  12 Aug 2017 17:33:51 -  1.58
> > +++ acpithinkpad.c  4 May 2018 18:20:43 -
> > @@ -110,8 +110,10 @@
> >  #defineTHINKPAD_TABLET_SCREEN_CHANGED  0x60c0
> >  #defineTHINKPAD_SWITCH_WIRELESS0x7000
> > 
> > -#define THINKPAD_NSENSORS 9
> > +#define THINKPAD_NSENSORS 10
> >  #define THINKPAD_NTEMPSENSORS 8
> > +#define THINKPAD_SENSOR_FANRPM THINKPAD_NTEMPSENSORS
> > +#define THINKPAD_SENSOR_PORTREPL   THINKPAD_NTEMPSENSORS + 1
> > 
> >  #define THINKPAD_ECOFFSET_VOLUME   0x30
> >  #define THINKPAD_ECOFFSET_VOLUME_MUTE_MASK 0x40
> > @@ -232,9 +234,18 @@ thinkpad_sensor_attach(struct acpithinkp
> > sensor_attach(>sc_sensdev, >sc_sens[i]);
> > }
> > 
> > -   /* Add fan probe */
> > -   sc->sc_sens[i].type = SENSOR_FANRPM;
> > -   sensor_attach(>sc_sensdev, >sc_sens[i]);
> > +/* Add fan probe */
> > +sc->sc_sens[THINKPAD_SENSOR_FANRPM].type = SENSOR_FANRPM;
> > +sensor_attach(>sc_sensdev,
> > +  >sc_sens[THINKPAD_SENSOR_FANRPM]);
> > +
> > +/* Add port replicator indicator */
> > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].type = SENSOR_INDICATOR;
> > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = SENSOR_S_UNKNOWN;
> > +strlcpy(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc, "port 
> > replicator",
> > +sizeof(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc));
> > +sensor_attach(>sc_sensdev,
> > +  >sc_sens[THINKPAD_SENSOR_PORTREPL]);
> > 
> > sensordev_install(>sc_sensdev);
> >  }
> > @@ -260,7 +271,7 @@ thinkpad_sensor_refresh(void *arg)
> > /* Read fan RPM */
> > acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANLO, 1, );
> > acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANHI, 1, );
> > -   sc->sc_sens[i].value = ((hi << 8L) + lo);
> > +   sc->sc_sens[THINKPAD_SENSOR_FANRPM].value = ((hi << 8L) + lo);
> >  }
> > 
> >  void
> > @@ -421,6 +432,14 @@ thinkpad_hotkey(struct aml_node *node, i
> > case THINKPAD_BACKLIGHT_CHANGED:
> > thinkpad_get_brightness(sc);
> > break;
> > +case THINKPAD_PORT_REPL_DOCKED:
> > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 1;
> > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> > SENSOR_S_OK;
> > +break;
> > +case THINKPAD_PORT_REPL_UNDOCKED:
> > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 0;
> > +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> > SENSOR_S_OK;
> > +break;
> > default:
> > /* unknown or boring event */
> > DPRINTF(("%s: unhandled event 0x%03llx\n", 
> > DEVNAME(sc),
> > 
> > 
> > Greetings, Tobias
> > 
> 

Hi,

here is the corrected diff. I hope this one is okay.

Greetings, Tobias

Index: acpithinkpad.c
===
RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
retrieving revision 1.58
diff -u -p -r1.58 acpithinkpad.c
--- acpithinkpad.c  12 Aug 2017 17:33:51 -  1.58
+++ acpithinkpad.c  6 May 2018 21:37:05 -
@@ -110,9 +110,12 @@
 #defineTHINKPAD_TABLET_SCREEN_CHANGED  0x60c0
 #defineTHINKPAD_SWITCH_WIRELESS0x7000
 
-#define THINKPAD_NSENSORS 9
+#define THINKPAD_NSENSORS 10
 #define THINKPAD_NTEMPSENSORS 8
 
+#define THINKPAD_SENSOR_FANRPM THINKPAD_NTEMPSENSORS
+#define THINKPAD_SENSOR_PORTREPL   THINKPAD_NTEMPSENSORS + 1
+
 #define THINKPAD_ECOFFSET_VOLUME   0x30
 #define THINKPAD_ECOFFSET_VOLUME_MUTE_MASK 0x40
 #define THINKPAD_ECOFFSET_FANLO0x84
@@ -233,8 +236,16 @@ thinkpad_sensor_attach(struct acpithinkp
}
 
/* Add fan probe */
-   sc->sc_sens[i].type = SENSOR_FANRPM;
-   sensor_attach(>sc_sensdev, >sc_sens[i]);
+   sc->sc_sens[THINKPAD_SENSOR_FANRPM].type = SENSOR_FANRPM;
+   sensor_attach(>sc_sensdev, >sc_sens[THINKPAD_SENSOR_FANRPM]);
+
+   /* Add port replicator indicator */
+   sc->sc_sens[THINKPAD_SENSOR_PORTREPL].type = SENSOR_INDICATOR;
+ 

Re: acpithinkpad(4): port-replicator hkey event

2018-05-06 Thread Mike Larkin
On Fri, May 04, 2018 at 08:28:04PM +0200, Tobias Tschinkowitz wrote:
> Hi @tech,
> 
> i thought it would be a good idea to delegate the port-replicator
> docking event to the sysctl(2) hw.sensors substree so that if the
> thinkpad gets docked/undocked one could react to it by using
> sensorsd(8).
> 
> Here is my diff:
> 

Can you regenerate with proper whitespace/indenting please?

-ml


> Index: acpithinkpad.c
> ===
> RCS file: /cvs/src/sys/dev/acpi/acpithinkpad.c,v
> retrieving revision 1.58
> diff -u -p -r1.58 acpithinkpad.c
> --- acpithinkpad.c  12 Aug 2017 17:33:51 -  1.58
> +++ acpithinkpad.c  4 May 2018 18:20:43 -
> @@ -110,8 +110,10 @@
>  #defineTHINKPAD_TABLET_SCREEN_CHANGED  0x60c0
>  #defineTHINKPAD_SWITCH_WIRELESS0x7000
> 
> -#define THINKPAD_NSENSORS 9
> +#define THINKPAD_NSENSORS 10
>  #define THINKPAD_NTEMPSENSORS 8
> +#define THINKPAD_SENSOR_FANRPM THINKPAD_NTEMPSENSORS
> +#define THINKPAD_SENSOR_PORTREPL   THINKPAD_NTEMPSENSORS + 1
> 
>  #define THINKPAD_ECOFFSET_VOLUME   0x30
>  #define THINKPAD_ECOFFSET_VOLUME_MUTE_MASK 0x40
> @@ -232,9 +234,18 @@ thinkpad_sensor_attach(struct acpithinkp
> sensor_attach(>sc_sensdev, >sc_sens[i]);
> }
> 
> -   /* Add fan probe */
> -   sc->sc_sens[i].type = SENSOR_FANRPM;
> -   sensor_attach(>sc_sensdev, >sc_sens[i]);
> +/* Add fan probe */
> +sc->sc_sens[THINKPAD_SENSOR_FANRPM].type = SENSOR_FANRPM;
> +sensor_attach(>sc_sensdev,
> +  >sc_sens[THINKPAD_SENSOR_FANRPM]);
> +
> +/* Add port replicator indicator */
> +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].type = SENSOR_INDICATOR;
> +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = SENSOR_S_UNKNOWN;
> +strlcpy(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc, "port 
> replicator",
> +sizeof(sc->sc_sens[THINKPAD_SENSOR_PORTREPL].desc));
> +sensor_attach(>sc_sensdev,
> +  >sc_sens[THINKPAD_SENSOR_PORTREPL]);
> 
> sensordev_install(>sc_sensdev);
>  }
> @@ -260,7 +271,7 @@ thinkpad_sensor_refresh(void *arg)
> /* Read fan RPM */
> acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANLO, 1, );
> acpiec_read(sc->sc_ec, THINKPAD_ECOFFSET_FANHI, 1, );
> -   sc->sc_sens[i].value = ((hi << 8L) + lo);
> +   sc->sc_sens[THINKPAD_SENSOR_FANRPM].value = ((hi << 8L) + lo);
>  }
> 
>  void
> @@ -421,6 +432,14 @@ thinkpad_hotkey(struct aml_node *node, i
> case THINKPAD_BACKLIGHT_CHANGED:
> thinkpad_get_brightness(sc);
> break;
> +case THINKPAD_PORT_REPL_DOCKED:
> +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 1;
> +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> SENSOR_S_OK;
> +break;
> +case THINKPAD_PORT_REPL_UNDOCKED:
> +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].value = 0;
> +sc->sc_sens[THINKPAD_SENSOR_PORTREPL].status = 
> SENSOR_S_OK;
> +break;
> default:
> /* unknown or boring event */
> DPRINTF(("%s: unhandled event 0x%03llx\n", 
> DEVNAME(sc),
> 
> 
> Greetings, Tobias
>