Skip to contentSkip to conversation

Sony Vaio PCG-FRV27 Memory Stick Reader

DISCUSSION Steev Klimaszewski 2 participants 4 messages Jun 15, 2004

lore
Share & tools
lore
#0 lore raw

Hello everyone, I am currently, still struggling (after 3 months or so) to get the memory stick reader working on my Sony VAIO PCG-FRV27 under Linux. I have tried all possible combinations of SCSI/USB to no avail with regards to getting the machine to recognize that the memory stick reader is there. I am not alone (although it seems there is only 1 other person besides myself who is trying to get it working) in getting it to work, and the other guy and I have been putting our heads together along with quite a few people in #gentoo-laptop (we both happen to run Gentoo) to figure out what is up, and can't seem to come up with anything.

The European version (i believe) is called the fr285m, and apparently this other person has the same problem as us (from the TCP/IP Info Forums) - I will quote his latest post...

"Same here. I'll have another look into it when I get time but I'm busy with other things right now and soooooo sick of people telling me to modprobe usb-storage, etc., that I'm about ready to smash something. Hope someone has some luck with this soon."

Windows says, it is using I/O range 03F8-03FF, and IRQ 4. It also says,
Location: on Extended IO Bus.

In linux, these correspond to a serial port, which, I have read, not to take/expect Linux to use the same I/O and IRQs as Windows, however, everything else seems to be using the same as its Windows counterparts wrt I/O and IRQs.

Osiekhan (nickname of the other fellow who uses Gentoo) has tried adding stuff to the unusual dev file in the kernel, but so far, we have come up empty.

http://tcpipinfo.org/frvinfo.php is a link to the information about the laptop itself, and it appears that most people either don't care, and go buy a USB memory card reader, or don't have any memory sticks to use to test the memory card reader. Personally, I don't see why I should have to go shell out 30-100 dollars for a memory card reader when I have one built in to the laptop, so I would prefer getting it to run.

Any ideas are greatly appreciated.

#1 lore raw

Is the memory card reader enumerated by ACPI?

acpidmp | acpixtract DSDT > DSDT
iasl -d DSDT
grep PNP0C0D DSDT.dsl

You could write a driver to attach to this PNPid
and get its current resources.

does the DSDT do anything special for Windows?
make it do the same for you, boot with
acpi_os_name="Microsoft Windows NT"

-Len

#2 lore raw
Quoted 7 lines · Len Brown

Is the memory card reader enumerated by ACPI?

acpidmp | acpixtract DSDT > DSDT
iasl -d DSDT
grep PNP0C0D DSDT.dsl

Quoted 10 lines

You could write a driver to attach to this PNPid
and get its current resources.

does the DSDT do anything special for Windows?
make it do the same for you, boot with
acpi_os_name="Microsoft Windows NT"

-Len

Thanks for the quick reply Len. What exactly is the PNP0C0D? I got the DSDT.dsl file, though - in the latest acpica-unix-20040527 package, some of the directory names are uppercase, and it took me a minute to figure out why it couldn't find things (first example was that it couldn't find ../namespace/nssomething.c.....) . How do I know if the DSDT does anything special for Windows? I am almost certain that writing a driver for the memory stick reader is above my abilities (currently) but I have been considering it.

#3 lore raw
Quoted 20 lines · Steev Klimaszewski
Quoted 7 lines · Len Brown

Is the memory card reader enumerated by ACPI?

acpidmp | acpixtract DSDT > DSDT
iasl -d DSDT
grep PNP0C0D DSDT.dsl

Quoted 10 lines

You could write a driver to attach to this PNPid
and get its current resources.

does the DSDT do anything special for Windows?
make it do the same for you, boot with
acpi_os_name="Microsoft Windows NT"

-Len

Quoted 9 lines

Thanks for the quick reply Len. What exactly is the PNP0C0D? I got the DSDT.dsl file, though - in the latest acpica-unix-20040527 package, some of the directory names are uppercase, and it took me a minute to figure out why it couldn't find things (first example was that it couldn't find ../namespace/nssomething.c.....) . How do I know if the DSDT does anything special for Windows? I am almost certain that writing a driver for the memory stick reader is above my abilities (currently) but I have been considering it.

I forgot to mention (still new to gmail, getting used to it)

        Device (LID)
        {
            Name (_HID, EisaId ("PNP0C0D"))
            Method (_LID, 0, NotSerialized)

...
Windows says that the device is a Sony Memory Stick (WB) so, a search through the DSDT.dsl file comes up with

                    Device (WBMS)
                    {
                        Name (_HID, EisaId ("WEC0515"))
                        Method (_STA, 0, NotSerialized)
                        {
                            If (\_SB.PCI0.PIB.WBMR.STSC ())
                            {
                                Return (0x00)
                            }
                            Else
                            {
                                \_SB.PCI0.PIB.WBMR.SETD (0x01)
                                And (\_SB.PCI0.PIB.WBMR.READ (0x30),
0x01, Local0)
                                If (Local0)
                                {
                                    Store (0x0F, Local0)
                                }
                                Else
                                {
                                    Store (0x0D, Local0)
                                }

                                Return (Local0)
                            }
                        }

                        Method (_DIS, 0, NotSerialized)
                        {
                            \_SB.PCI0.PIB.WBMR.SETD (0x01)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x30, 0x00)
                            \_SB.PCI0.PIB.WBMR.EXCF ()
                        }

                        Method (_CRS, 0, NotSerialized)
                        {
                            Name (BUF0, ResourceTemplate ()
                            {
                                IO (Decode16, 0x0000, 0x0000, 0x01, 0x00)
                                IRQNoFlags () {}
                            })
                            Acquire (MTX0, 0xFFFF)
                            \_SB.PCI0.PIB.WBMR.SETD (0x01)
                            CreateByteField (BUF0, 0x02, IOL0)
                            CreateByteField (BUF0, 0x03, IOH0)
                            CreateByteField (BUF0, 0x04, IOL1)
                            CreateByteField (BUF0, 0x05, IOH1)
                            CreateByteField (BUF0, 0x07, LEN0)
                            CreateWordField (BUF0, 0x09, IRQW)
                            Store (\_SB.PCI0.PIB.WBMR.READ (0x60), IOH0)
                            Store (\_SB.PCI0.PIB.WBMR.READ (0x61), IOL0)
                            Store (\_SB.PCI0.PIB.WBMR.READ (0x60), IOH1)
                            Store (\_SB.PCI0.PIB.WBMR.READ (0x61), IOL1)
                            Store (0x08, LEN0)
                            And (\_SB.PCI0.PIB.WBMR.READ (0x70), 0x0F, Local0)
                            If (Local0)
                            {
                                ShiftLeft (One, Local0, IRQW)
                            }
                            Else
                            {
                                Store (Zero, IRQW)
                            }

                            \_SB.PCI0.PIB.WBMR.EXCF ()
                            Release (MTX0)
                            Return (BUF0)
                        }

                        Method (_PRS, 0, NotSerialized)
                        {
                            Acquire (MTX0, 0xFFFF)
                            Name (PRSA, ResourceTemplate ()
                            {
                                StartDependentFnNoPri ()
                                {
                                    IO (Decode16, 0x03F8, 0x03F8, 0x01, 0x08)
                                    IRQ (Edge, ActiveHigh, Exclusive) {4}
                                }
                                EndDependentFn ()
                            })
                            \_SB.PCI0.PIB.WBMR.SETD (0x01)
                            Store (PRSA, Local0)
                            \_SB.PCI0.PIB.WBMR.EXCF ()
                            Release (MTX0)
                            Return (Local0)
                        }

                        Method (_SRS, 1, NotSerialized)
                        {
                            Acquire (MTX0, 0xFFFF)
                            CreateByteField (Arg0, 0x02, IOL0)
                            CreateByteField (Arg0, 0x03, IOH0)
                            CreateByteField (Arg0, 0x04, IOL1)
                            CreateByteField (Arg0, 0x05, IOH1)
                            CreateByteField (Arg0, 0x07, LEN0)
                            CreateWordField (Arg0, 0x09, IRQW)
                            \_SB.PCI0.PIB.WBMR.SETD (0x01)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x30, 0x01)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x60, IOH0)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x61, IOL0)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x60, IOH1)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x61, IOL1)
                            FindSetLeftBit (IRQW, Local0)
                            If (LNot (LEqual (Local0, Zero)))
                            {
                                Subtract (Local0, 0x01, Local0)
                            }

                            \_SB.PCI0.PIB.WBMR.WRIT (0x70, Local0)
                            \_SB.PCI0.PIB.WBMR.EXCF ()
                            Release (MTX0)
                        }

                        Mutex (MTX0, 0x01)
                        Method (_PS0, 0, NotSerialized)
                        {
                            \_SB.PCI0.PIB.WBMR.SETD (0x01)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x22, 0xE0)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x30, 0x01)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x60, 0x03)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x61, 0xF8)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x70, 0x04)
                            \_SB.PCI0.PIB.WBMR.EXCF ()
                        }

                        Method (_PS3, 0, NotSerialized)
                        {
                            \_SB.PCI0.PIB.WBMR.SETD (0x01)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x30, 0x00)
                            \_SB.PCI0.PIB.WBMR.WRIT (0x22, 0x00)
                            \_SB.PCI0.PIB.WBMR.EXCF ()
                        }
                    }
                }
            }

Is this what I would be looking for if/when I were to write a driver?