
Motorola RAZR V3a / V3s
AllTel, Motorola MotoRAZR V3a, EVDO Internet Access, and Linux
First, contrary to popular belief, this is a very competent little phone. It serves my needs quite well, as my needs are few. I wanted good sound quality (Motorola has always provided this, even in my old T720 that I had for years), good battery life (this phone stays powered easily after 24 hrs and a few calls, and charges off USB when connected), bluetooth (for my headset, easier to use when in the car), and EVDO 'net access. The final bit there, proved a bit difficult, as I run Linux, specifically Kubuntu 7.04.
I spent a good 5 hours the night I got home getting this functioning. It should not take this long, and by writing this, I hope no one else takes this long either.
This should work for just about any phone out there not being recognized by the kernel, at least for Internet access.
Step 1 - Get the phone recognized.
This is, by far, the hardest part, and what caused most of my problems. The V3a is unique enough that the kernel build in Kubuntu 7.04 didn't recognize it, and give it a port immediately. I felt my way along many a blind alley trying to get cdc-acm to work, and finally found a solution in usbserial (info for that gleaned from http://ubuntuforums.org/showthread.php?t=3439 89).
When you plug the cellphone into the computer, cdc-acm is supposed to automatically assign it a /dev point to bind to. With the V3a being so new, the kernel can't figure it out, and you end up with the following in dmesg:
~$ dmesg | tail
[23574.428000] usb 2-1: new full speed USB device using uhci_hcd and address 4
[23574.644000] usb 2-1: configuration #1 chosen from 1 choice
Notice, no info on a port assignment or the like, it notes that there's only one choice available to the kernel, and that's basically that it's there, and nothing more. A useless brick, if you will, connected via USB.
cdc-acm is supposed to kick in here and assign it a point. As I said, that doesn't happen with the V3a. So, we have to determine the info from the phone that we can, and use usbserial instead.
We'll need to compare device listing outputs to do this, so for now, disconnect your phone.
~$ cat /proc/bus/usb/devices > devices
This will create a file ~/devices, basially a listing of all devices currently connected to your machine. A snapshot, if you will, of the current stuff attached to your computer.
Now, connect your phone. Give it a few moments, the phone should beep a few times. We can now compare what's currently connected to what was connected, and find the info from the phone itself.
~$ diff /proc/bus/usb/devices devices | grep Vendor
What that command does is looks at the current device list (/proc/bus/usb/devices) and compares it (using the diff command) to what you had when you didn't have the phone connected. Finally, we filter it through grep (a search engine of sorts) for just what we want, the vendor info. You should get a single line detailing the vendor and product ID.
~$ diff /proc/bus/usb/devices devices | grep Vendor
< P: Vendor=22b8 ProdID=2ac4 Rev= 0.01
Now, we have the vendor and product info for the phone.
Next, we need to load the usbserial module in, with that specific information associated with it.
~$ sudo modprobe usbserial vendor=0x22b8 product=0x2ac4
That loads usbserial in, and gives it a vendor and product to work with. If you do this while the phone is still connected, it should beep at you.
Finally, disconnect the phone, and reconnect it. After a few seconds (and a few beeps from the phone), check the message log again.
~$ dmesg | tail
[24439.348000] usb 2-1: new full speed USB device using uhci_hcd and address 6
[24439.564000] usb 2-1: configuration #1 chosen from 1 choice
[24439.564000] usbserial_generic 2-1:1.0: generic converter detected
[24439.564000] usb 2-1: generic converter now attached to ttyUSB0
[24439.568000] usbserial_generic 2-1:1.1: generic converter detected
[24439.568000] usb 2-1: generic converter now attached to ttyUSB1
As you can see, we've now got it assigned to a port we can work with, in this case, /dev/ttyUSB0.
Step 2 - setting up a ppp dialer
Everyone will have their favorite method of doing this, what with the multitude of ppp dialers out there. Everything from fancy GUIs to collections of shell scripts. Personally, I use KDE, and like the KPPP dialer. It manages everything rather well for me.
The basics:
Username - @alltel.net
Password - alltel
Number - #777
Device - /dev/ttyUSB0
That should be what you'd need for most any dialer out there. The rest that follows is specific to KPPP.
Launch KPPP, click Configure.
On the Accounts tab, click New. In the warning, click Manual Configuration. For configuration name, put in anything you want (I put AllTel). Click Add, and enter #777 for the phone number. Click OK twice, and you'll be back on the KPPP Configurations dialog.
On the Modems tab, click New. For modem name, enter anything (I put V3a), for device, choose /dev/ttyUSB0. Click OK.
OK out of the KPPP Configuration dialog.
Enter your username (remember, @alltel.net), and the password (alltel).
You should be all set now, you can choose to "show log window" if you want, to see the progress, but otherwise, click connect and go!
There's 2 problems with this setup, you'll need to modprobe that same device every time you want to use your EVDO 'net access, but the Prod/vendor info never change. Easily done in a shell script or during boottime, up to you. The other issue is if you disconnect, then want to reconnect right away, it appears the phone doesn't really 'let go' properly, and must be unplugged and reconnected to make that 2nd ppp connection. Again, you don't have to go through the finding/modprobe step again, just pull the cable and reconnect it.
On a side note, I have yet to find any info on getting this phone setup and working with bitpim, kmobiletools, moto4lin, etc., so I still have no way to add ringtones, wallpaper, etc. to my phone yet. If anyone has any info on that, please, let me know!