Do you get any non-zero answers when reading 0x00? I think that the datasheet is incorrect and WIA does not actually return 0x48, but I don't have a chip handy right now to test.
I'm not sure if there's any other registers that need to be set for the MPU to work, but for the record, I have it working and these are the MPU register values I use:
0x6B = 0x01; // Clock source is PLLGYROZ
0x19 = 0x04; // Set SMPLRT_DIV to 0x04; this gives a 200 Hz sample rate when using the DLPF
0x1A = 0x03; // 42 Hz LPF
0x6A = 0x01; // Disable master mode and clear all signal paths
0x1B = 0x18; // Full gyro range
0x1C = 0x08; // 4G accel range
0x37 = 0x32; // Interrupts pin stays high until cleared, cleared on any read, I2C bypass
0x38 = 0x01; // Data ready interrupt enabled
You could try putting it in FUSEROM mode (write 0x0F to register 0xA) and then reading the sensitivity adjustment values from registers 0x10 to 0x12; you should get the same value across multiple reads.
I'm not sure if there's a "proper" initialization sequence for the AK8975, but I've had the most success with: Put in FUSEROM mode -> read ASAX/Y/Z -> single sample mode, and then waiting on the DRDY interrupt (which, despite what the MPU9150 data sheet claims, is available on pin 14). I definitely had a large amount of trouble actually getting it to work correctly though.
One last question: what speed are you running the I2C bus at? The STM32F4xx line, at least, has issues running at 100 kHz--I have to run at 400 kHz to get correct functionality.