Hi,
Yes, it is correct:

// MMA8652FC Sensitivity
#define SENSITIVITY_2G 1024
#define SENSITIVITY_4G 512
#define SENSITIVITY_8G 256
/******************************************************************************
* Simple accelerometer offset calibration
******************************************************************************/
void MMA8652FC_Calibration (void)
{
char X_offset, Y_offset, Z_offset;
DataReady = 0;
while (!DataReady){} // Is a first set of data ready?
DataReady = 0;
I2C_WriteRegister(MMA8652FC_I2C_ADDRESS, CTRL_REG1, 0x00); // Standby mode
I2C_ReadMultiRegisters(MMA8652FC_I2C_ADDRESS, OUT_X_MSB_REG, 6, AccelData); // Read data output registers 0x01-0x06
Xout_12_bit = ((short) (AccelData[0]<<8 | AccelData[1])) >> 4; // Compute 12-bit X-axis acceleration output value
Yout_12_bit = ((short) (AccelData[2]<<8 | AccelData[3])) >> 4; // Compute 12-bit Y-axis acceleration output value
Zout_12_bit = ((short) (AccelData[4]<<8 | AccelData[5])) >> 4; // Compute 12-bit Z-axis acceleration output value
X_offset = Xout_12_bit / 2 * (-1); // Compute X-axis offset correction value
Y_offset = Yout_12_bit / 2 * (-1); // Compute Y-axis offset correction value
Z_offset = (Zout_12_bit - SENSITIVITY_2G) / 2 * (-1); // Compute Z-axis offset correction value
I2C_WriteRegister(MMA8652FC_I2C_ADDRESS, OFF_X_REG, X_offset);
I2C_WriteRegister(MMA8652FC_I2C_ADDRESS, OFF_Y_REG, Y_offset);
I2C_WriteRegister(MMA8652FC_I2C_ADDRESS, OFF_Z_REG, Z_offset);
I2C_WriteRegister(MMA8652FC_I2C_ADDRESS, CTRL_REG1, 0x39); // Active mode again
}
Take a look at my complete example code here.
Regards,
Tomas
PS: If my answer helps to solve your question, please mark it as "Correct". Thank you.