From: Davide on
Hi guys,
I'm trying exactly the same thing.

I thought that I had to configure the base address in the INF file and then in the EvtPrepareHardware callback, read the translated resource address and write it to the GPIO Base Address thru the LPC (using CONFIG_ADDRESS and DATA_ADDRESS registers of the SCH), but according to Tim's post, it seams is the opposite...

So I have to read the base address from the proper LPC register (in the prepareHardware callback, maybe protecting the access to the CONFIG_ADDRESS with a spin lock I think...) and pass it to the device context, is it right? But in this case what am I suppose to write in the INF file?



Tim Roberts wrote:

Do you mean US15w, the Atom chipset that used to be called "Poulsbo"?
18-Feb-10

Do you mean US15w, the Atom chipset that used to be called "Poulsbo"?


This depends on the design of your motherboard and your BIOS. it is
entirely possible that your BIOS configures the LPC with the GPIOs
disabled.


it is complicated. Are you looking at the US15w datasheet? You have to
find the I/O port base for the LPC (by getting the I/O BAR for device 31
function 0), then fetch the base address of the GPIO registers within the
I/O space, then go tweak the register itself.

There are better ways to get I/O pins.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.

Previous Posts In This Thread:

On Tuesday, February 16, 2010 2:41 AM
Norrih wrote:

GPIO read/write on intel using DDK example : Genport
Hi All,

I would like to control one of the 14 GPIO provided on the Poulsbo UW15w.
and I would like to use the driver (Genport) provided in DDK.

Do you know if this would work to set and clear GPIO.

How do I get the Address of the Port i want to set. (gpdwrite . ...)
is it set in the .inf

Thanks

regards

Norrih

On Tuesday, February 16, 2010 12:10 PM
eagersh wrote:

Genport provides only interface to access GPIO.
Genport provides only interface to access GPIO. Using gpdwrite/gpdread
you could specify an offset from a Base address and access to
particular IO port. The Base address is specified in *.inf file. You
could check Base Addresses in PortIOEvtDevicePrepareHardware of
device.c .

Igor Sharovar

On Thursday, February 18, 2010 2:42 AM
Tim Roberts wrote:

Do you mean US15w, the Atom chipset that used to be called "Poulsbo"?
Do you mean US15w, the Atom chipset that used to be called "Poulsbo"?


This depends on the design of your motherboard and your BIOS. it is
entirely possible that your BIOS configures the LPC with the GPIOs
disabled.


it is complicated. Are you looking at the US15w datasheet? You have to
find the I/O port base for the LPC (by getting the I/O BAR for device 31
function 0), then fetch the base address of the GPIO registers within the
I/O space, then go tweak the register itself.

There are better ways to get I/O pins.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.


Submitted via EggHeadCafe - Software Developer Portal of Choice
How to display a Gravatar Image with 100 Percent Client Script Code
http://www.eggheadcafe.com/tutorials/aspnet/3c8a04cd-471e-48b7-8dcc-b0877c10ecb4/how-to-display-a-gravatar.aspx
From: Tim Roberts on
Davide wrote:
>
>I'm trying exactly the same thing.
>
>I thought that I had to configure the base address in the INF file and
>then in the EvtPrepareHardware callback, read the translated resource
>address and write it to the GPIO Base Address thru the LPC (using
>CONFIG_ADDRESS and DATA_ADDRESS registers of the SCH), but according
>to Tim's post, it seams is the opposite...

Tim's post was trying to say "it depends". Since this is non-PnP, you
won't even get an EvtPrepareHardware callback unles you have assigned
resources in the INF file, so in a sense your approach is correct.

The key problem is that your LPC might be configured with the GPIOs turned
off. Many motherboard are. You will have to do SOME manipulation of the
LPC registers just to check this.

>So I have to read the base address from the proper LPC register (in the
>prepareHardware callback, maybe protecting the access to the
>CONFIG_ADDRESS with a spin lock I think...) and pass it to the device
>context, is it right? But in this case what am I suppose to write in
>the INF file?

If you are REALLy intent on doing this (and, as I said, it seems like a
really hard way to get GPIO pins), I think the only way you can do it is to
CHOOSE a base address that you know does not conflict with any other
device, put that in your INF, then write the registers in PrepareHardware
to make sure the hardware actually responds there.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.
From: Davide on
Thanks for your reply.
But now I've become curious, which is the best way to access the GPIO ?
From: Tim Roberts on
Davide <Davide(a)discussions.microsoft.com> wrote:
>
>But now I've become curious, which is the best way to access the GPIO ?

With a USB device or a parallel port adapter, where you are in complete
control of your destiny.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.
From: Pavel A. on
"Davide" <Davide(a)discussions.microsoft.com> wrote in message
news:28A51F33-B0E1-474F-B411-B61B8D064CFF(a)microsoft.com...
> Thanks for your reply.
> But now I've become curious, which is the best way to access the GPIO ?

Since this is an Intel platform, the best way is to consult with their
support or partner (system builder).

--pa