Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Jun 2002 16:14:45 +0200
From:      Willem van Engen <wvengen@stack.nl>
To:        "Takanori Watanabe" <takawata@axe-inc.co.jp>
Cc:        current@freebsd.org, nsouch@freebsd.org
Subject:   Re: smbalert# hook for smbus childs
Message-ID:  <20020627161445.553c3b82.wvengen@stack.nl>
In-Reply-To: <200206270320.MAA26662@axe-inc.co.jp>
References:  <20020624145921.463108fc.wvengen@stack.nl> <200206270320.MAA26662@axe-inc.co.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 27 Jun 2002 12:21:19 +0900
"Takanori Watanabe" <takawata@axe-inc.co.jp> wrote:

> In message <20020624145921.463108fc.wvengen@stack.nl>, Willem van Engen wrote:
> 
> >Hello,
> >
> >there already is some code for smbalert# handling on intpm
> >(ENABLE_ALART), but there is no support for handling it in a driver. O2
> >AudioDJ (OZ162) chips use this signal to indicate that a button was
> >pressed. So I need a way for a driver to be notified when smbalert#
> >occurs.
> 
> I have never tested the code, though. 

Well, it works :) When I press the button, the function that was passed to
bus_setup_alart is called.

> 
> >Of course I thought immediately about bus_(setup|teardown)_intr. I wrote
> >something like that for smbus: bus_(setup|teardown)_alart (see patch),
> >that works now. But is this The Right Way to do it? I do have some
> >thoughts on it, but maybe someone more knowledgeable than me could comment
> >on it.
> 
> I thought about ACPI embedded controller SMBus device driver and 
> this mechanism will be needed for implement event notification mechanism. 

That's a very good idea! And it would support all kinds of smbus
controllers. I started to look at this. But then I found this asl
snippet of my notebook:
        Device(EC0_) {               
                Name(_HID, 0x090cd041)
                Name(_CRS, Buffer(0x12) {0x47,0x1, 0x62, 0x0, 0x62, 0x0, 0x1, 0x1, 0x47, 0x1, 0x66, 0x0, 0x66, 0x0,0x1, 0x1, 0x79, 0x0 })
                Name(_GPE, 0x0)		Method(_Reg, 2) {[...] }

                OperationRegion(SMB_, EmbeddedControl, 0x0, 0x40)
                Field(SMB_, ByteAcc, Lock, Preserve) {
                    Offset(0x4),
                    CMCM,	8,
                    CMD1,	8,
                    CMD2,	8,
                    CMD3,	8,
                    Offset(0x18),
                    SMBP,	8,
                    SMBS,	8,
                    SMBA,	8,
                    SMBC,	8,
                    SMDD,	264
                }
                [2 more Field(SMB_, ...) definitions]
                Mutex(MUT0, 0)
                Event(SMBE)
                Method(SMRE, 4) { [...] }	# SMBus Read
	        Method(SMWE, 4) { [...] }	# SMBus Write
		[other methods that use SMRE&SMWR for reading temperature]
The smbus is used here (SMB_ offset 0x18 probabely is the SMB-HC[1]
register set), but no EC-SMB-HC (device with ACPI0001/ACPI0005 _HID)
here. It looks like SMBus CMI[2], but it lacks the SMBUS01 _HID (and the
_UID). So how does the os know that here's a smbus? Is it bad luck with
the supplied asl, or did I miss something?

[1] http://www.acpi.info/DOWNLOADS/ACPIspec-2-0a.pdf par 13.9.3
[2] http://www.smbus.org/specs/smbus_cmi10.pdf

> >It might be better to use bus_*_intr instead of bus_*_alart, but one
> >would need to bus_alloc_resource a slave address and pass that to
> >bus_setup_intr. But then it makes sense to use those slave address
> >resources to send smbus commands, right? But how would that fit into the
> >bus_space_* functions?
> 
> *I* think it is fit to smbus specific function.

Thanks, I'll leave it as it is now.

- Willem

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020627161445.553c3b82.wvengen>