Fingerprint: Add HAL close() code

Bug 22248856
Bug 22374372

Change-Id: I06a59bc7050a227307c857fc7db0985b84fd293a
Signed-off-by: Sasha Levitskiy <sanek@google.com>
diff --git a/fingerprintd/FingerprintDaemonProxy.cpp b/fingerprintd/FingerprintDaemonProxy.cpp
index c310160..beb95de 100644
--- a/fingerprintd/FingerprintDaemonProxy.cpp
+++ b/fingerprintd/FingerprintDaemonProxy.cpp
@@ -225,11 +225,26 @@
 }
 
 int32_t FingerprintDaemonProxy::closeHal() {
-    return -ENOSYS; // TODO
+    ALOG(LOG_VERBOSE, LOG_TAG, "nativeCloseHal()\n");
+    if (mDevice == NULL) {
+        ALOGE("No valid device");
+        return -ENOSYS;
+    }
+    int err;
+    if (0 != (err = mDevice->common.close(reinterpret_cast<hw_device_t*>(mDevice)))) {
+        ALOGE("Can't close fingerprint module, error: %d", err);
+        return err;
+    }
+    mDevice = NULL;
+    return 0;
 }
 
 void FingerprintDaemonProxy::binderDied(const wp<IBinder>& who) {
     ALOGD("binder died");
+    int err;
+    if (0 != (err = closeHal())) {
+        ALOGE("Can't close fingerprint device, error: %d", err);
+    }
     if (IInterface::asBinder(mCallback) == who) {
         mCallback = NULL;
     }