2003/03/15に秋葉原のイケショップでSonyの PEG-TG50 を購入した。 で、早速、Linuxから利用すべく四苦八苦してみた。
まずは、使ったLinuxの環境を記述しておこう。
で、何をしたか。
/usr/src/linux/drivers/usb/serial/visor.h (HotSync用)
--- ./visor.h.orig Tue Nov 13 02:53:56 2001 +++ ./visor.h Sun Mar 16 03:08:40 2003 @@ -28,6 +28,8 @@ #define SONY_VENDOR_ID 0x054C #define SONY_CLIE_3_5_ID 0x0038 #define SONY_CLIE_4_0_ID 0x0066 +#define SONY_CLIE_4_1_ID 0x009a +#define SONY_CLIE_5_0_ID 0x00da /**************************************************************************** * Handspring Visor Vendor specific request codes (bRequest values)
/usr/src/linux/drivers/usb/serial/visor.c (HotSync用)
--- ./visor.c.orig Tue Feb 26 04:38:07 2002 +++ ./visor.c Sun Mar 16 02:52:00 2003 @@ -171,6 +171,12 @@ static __devinitdata struct usb_device_id clie_id_4_0_table [] = { { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_4_0_ID) }, + { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_4_1_ID) }, + { } /* Terminating entry */ +}; + +static __devinitdata struct usb_device_id clie_id_5_0_table [] = { + { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_5_0_ID) }, { } /* Terminating entry */ }; @@ -181,6 +187,8 @@ { USB_DEVICE(PALM_VENDOR_ID, PALM_M125_ID) }, { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_3_5_ID) }, { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_4_0_ID) }, + { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_4_1_ID) }, + { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_5_0_ID) }, { } /* Terminating entry */ }; @@ -292,6 +300,32 @@ read_bulk_callback: visor_read_bulk_callback, }; +/* device info for the Sony Clie OS version 5.0 */ +static struct usb_serial_device_type clie_5_0_device = { + name: "Sony Cli5.0", + id_table: clie_id_5_0_table, + needs_interrupt_in: MUST_HAVE_NOT, /* this device must not have an interrupt in endpoint */ + needs_bulk_in: MUST_HAVE, /* this device must have a bulk in endpoint */ + needs_bulk_out: MUST_HAVE, /* this device must have a bulk out endpoint */ + num_interrupt_in: 0, + num_bulk_in: 2, + num_bulk_out: 2, + num_ports: 2, + open: visor_open, + close: visor_close, + throttle: visor_throttle, + unthrottle: visor_unthrottle, + startup: visor_startup, + shutdown: visor_shutdown, + ioctl: visor_ioctl, + set_termios: visor_set_termios, + write: visor_write, + write_room: visor_write_room, + chars_in_buffer: visor_chars_in_buffer, + write_bulk_callback: visor_write_bulk_callback, + read_bulk_callback: visor_read_bulk_callback, +}; + #define NUM_URBS 24 #define URB_TRANSFER_BUFFER_SIZE 768 static struct urb *write_urb_pool[NUM_URBS]; @@ -849,6 +883,7 @@ usb_serial_register (&palm_4_0_device); usb_serial_register (&clie_3_5_device); usb_serial_register (&clie_4_0_device); + usb_serial_register (&clie_5_0_device); /* create our write urb pool and transfer buffers */ spin_lock_init (&write_urb_pool_lock); @@ -883,6 +918,7 @@ usb_serial_deregister (&palm_4_0_device); usb_serial_deregister (&clie_3_5_device); usb_serial_deregister (&clie_4_0_device); + usb_serial_deregister (&clie_5_0_device); spin_lock_irqsave (&write_urb_pool_lock, flags);
/usr/src/linux/drivers/usb/storage/unusual_devs.h.diff (MSImport用)
--- /usr/src/aaaa/kernel-source-2.4.18/drivers/usb/storage/unusual_devs.h Tue Feb 26 04:38:07 2002 +++ ./unusual_devs.h Sun Mar 16 02:55:44 2003 @@ -235,6 +235,12 @@ US_SC_8070, US_PR_CBI, NULL, US_FL_FIX_INQUIRY ), +UNUSUAL_DEV( 0x054c, 0x00d9, 0x0000, 0x9999, + "Sony", + "PEG-TG50 Mass Storage", + US_SC_8070, US_PR_CBI, NULL, + US_FL_FIX_INQUIRY ), + UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299, "Y-E Data", "Flashbuster-U",
認識失敗のlog
dmesgより抜粋 hub.c: USB new device connect on bus1/1, assigned device number 11 usb-storage: act_altsettting is 0 usb-storage: id_index calculated to be: 27 usb-storage: Array length appears to be: 71 usb-storage: Vendor: Sony usb-storage: Product: PEG-TG50 Mass Storage usb-storage: USB Mass Storage device detected usb-storage: Endpoints: In: 0xd1b73c60 Out: 0xd1b73c74 Int: 0xd1b73c88 (Period 1) usb-storage: Found existing GUID 054c00d90000000000000000 usb-storage: Allocating IRQ for CBI transport usb-storage: usb_submit_urb() returns 0 WARNING: USB Mass Storage data integrity not assured USB Mass Storage device found at 11
$ lsmod Module Size Used by Tainted: PF sg 23588 0 (unused) vfat 9276 0 (autoclean) usb-storage 64800 0 msdos 4860 0 (autoclean) fat 29112 0 (autoclean) [vfat msdos] visor 10272 0 usbserial 16832 0 [visor] usb-uhci 20996 0 (unused) usbcore 48448 1 [usb-storage visor usbserial rio500 usb-uhci]※scsi_mod, sd_modは、カーネル組み込みなので見えてません。