diff --git a/include/gui/ISensorServer.h b/include/gui/ISensorServer.h
index e590ce9..3dca2a3 100644
--- a/include/gui/ISensorServer.h
+++ b/include/gui/ISensorServer.h
@@ -41,7 +41,6 @@
     virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName,
              int mode, const String16& opPackageName) = 0;
     virtual int32_t isDataInjectionEnabled() = 0;
-    virtual status_t  setSensorPhysicalData(const char* physicaldata) = 0;
 };
 
 // ----------------------------------------------------------------------------
diff --git a/include/gui/SensorManager.h b/include/gui/SensorManager.h
index 2b07ca7..0cff46c 100644
--- a/include/gui/SensorManager.h
+++ b/include/gui/SensorManager.h
@@ -58,7 +58,7 @@
     Sensor const* getDefaultSensor(int type);
     sp<SensorEventQueue> createEventQueue(String8 packageName = String8(""), int mode = 0);
     bool isDataInjectionEnabled();
-    bool SetPhysicalData(const char* data);
+
 private:
     // DeathRecipient interface
     void sensorManagerDied();
diff --git a/libs/gui/ISensorServer.cpp b/libs/gui/ISensorServer.cpp
index 8cd1725..f581b5c 100644
--- a/libs/gui/ISensorServer.cpp
+++ b/libs/gui/ISensorServer.cpp
@@ -35,8 +35,7 @@
 enum {
     GET_SENSOR_LIST = IBinder::FIRST_CALL_TRANSACTION,
     CREATE_SENSOR_EVENT_CONNECTION,
-    ENABLE_DATA_INJECTION,
-    SET_SENSOR_PHYSICAL_DATA,
+    ENABLE_DATA_INJECTION
 };
 
 class BpSensorServer : public BpInterface<ISensorServer>
@@ -84,16 +83,6 @@
         remote()->transact(ENABLE_DATA_INJECTION, data, &reply);
         return reply.readInt32();
     }
-
-    virtual status_t setSensorPhysicalData(const char* physicaldata)
-    {
-        Parcel data, reply;
-        //ALOGD("ISensorManager::SetSensorPhysicalData(%s)",physicaldata);
-        data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor());
-        data.writeCString(physicaldata);
-        remote()->transact(SET_SENSOR_PHYSICAL_DATA, data, &reply);
-        return reply.readInt32();
-     }
 };
 
 // Out-of-line virtual method definition to trigger vtable emission in this
@@ -135,14 +124,6 @@
             reply->writeInt32(static_cast<int32_t>(ret));
             return NO_ERROR;
         }
-        case SET_SENSOR_PHYSICAL_DATA: {
-            CHECK_INTERFACE(ISensorServer, data, reply);
-            const char* physicaldata = data.readCString();
-            //ALOGD("ISensorManager, BnSensorServer::onTransact, physicaldata is: (%s)",physicaldata);
-            status_t result = setSensorPhysicalData(physicaldata);
-            reply->writeInt32(result);
-            return NO_ERROR;
-        }
     }
     return BBinder::onTransact(code, data, reply, flags);
 }
diff --git a/libs/gui/SensorManager.cpp b/libs/gui/SensorManager.cpp
index 343131f..33608b5 100644
--- a/libs/gui/SensorManager.cpp
+++ b/libs/gui/SensorManager.cpp
@@ -227,22 +227,5 @@
     return false;
 }
 
-bool SensorManager::SetPhysicalData(const char* data)
-{
-    status_t reply;
-    //ALOGD("SensorManager::SetPhysicalData(%s)",data);
-
-    reply = mSensorServer->setSensorPhysicalData(data);
-
-    if(reply == NO_ERROR)
-    {
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
 // ----------------------------------------------------------------------------
 }; // namespace android
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp
index 48ae2fb..dd1bccf 100644
--- a/services/sensorservice/SensorDevice.cpp
+++ b/services/sensorservice/SensorDevice.cpp
@@ -407,21 +407,6 @@
      return mSensorModule->set_operation_mode(mode);
 }
 
-status_t SensorDevice::setSensorPhysicalData(const char* physicaldata)
-{
-    //ALOGD("SensorDevice::setSensorPhysicalData(%s)",physicaldata);
-    Mutex::Autolock _l(mLock);
-    if((mSensorModule->set_sensor_physical_data == NULL) || (getHalDeviceVersion() < SENSORS_DEVICE_API_VERSION_1_3_5))
-    {
-        return NO_INIT;
-    }
-    else
-    {
-        return mSensorModule->set_sensor_physical_data(physicaldata);
-    }
-}
-
-
 // ---------------------------------------------------------------------------
 
 int SensorDevice::Info::numActiveClients() {
diff --git a/services/sensorservice/SensorDevice.h b/services/sensorservice/SensorDevice.h
index f658497..c484849 100644
--- a/services/sensorservice/SensorDevice.h
+++ b/services/sensorservice/SensorDevice.h
@@ -104,7 +104,6 @@
     void autoDisable(void *ident, int handle);
     status_t injectSensorData(const sensors_event_t *event);
     void dump(String8& result);
-    status_t setSensorPhysicalData(const char* physicaldata);
 };
 
 // ---------------------------------------------------------------------------
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index 2548a3e..fd72b23 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -735,14 +735,6 @@
     return accessibleSensorList;
 }
 
-status_t SensorService::setSensorPhysicalData(const char* physicaldata)
-{
-    SensorDevice& dev(SensorDevice::getInstance());
-
-    //ALOGD("SensorService::setSensorPhysicalData(%s)",physicaldata);
-    return dev.setSensorPhysicalData(physicaldata);
-}
-
 sp<ISensorEventConnection> SensorService::createSensorEventConnection(const String8& packageName,
         int requestedMode, const String16& opPackageName) {
     // Only 2 modes supported for a SensorEventConnection ... NORMAL and DATA_INJECTION.
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index 3a1ffb2..9a573ae 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -130,7 +130,6 @@
     virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName,
              int requestedMode, const String16& opPackageName);
     virtual int isDataInjectionEnabled();
-    virtual status_t setSensorPhysicalData(const char* physicaldata);
     virtual status_t dump(int fd, const Vector<String16>& args);
 
     class SensorEventConnection : public BnSensorEventConnection, public LooperCallback {
