from the slave device. If it is correct, the 8 bytes page data are passed
 to userspace, otherwise an I/O error is returned.
 
+"page1"
+-------
+This file provides full 8 bytes of the chip Page 1 (01h).
+This page contains the ICA, elapsed time meter and current offset data of the DS2438.
+Internally when this file is read, the additional CRC byte is also obtained
+from the slave device. If it is correct, the 8 bytes page data are passed
+to userspace, otherwise an I/O error is returned.
+
 "temperature"
 -------------
 Opening and reading this file initiates the CONVERT_T (temperature conversion)
 
 #define DS2438_CURRENT_MSB             0x06
 #define DS2438_THRESHOLD               0x07
 
+/* Page #1 definitions */
+#define DS2438_ETM_0                   0x00
+#define DS2438_ETM_1                   0x01
+#define DS2438_ETM_2                   0x02
+#define DS2438_ETM_3                   0x03
+#define DS2438_ICA                     0x04
+#define DS2438_OFFSET_LSB              0x05
+#define DS2438_OFFSET_MSB              0x06
+
 static int w1_ds2438_get_page(struct w1_slave *sl, int pageno, u8 *buf)
 {
        unsigned int retries = W1_DS2438_RETRIES;
        return ret;
 }
 
+static ssize_t page1_read(struct file *filp, struct kobject *kobj,
+                         struct bin_attribute *bin_attr, char *buf,
+                         loff_t off, size_t count)
+{
+       struct w1_slave *sl = kobj_to_w1_slave(kobj);
+       int ret;
+       u8 w1_buf[DS2438_PAGE_SIZE + 1 /*for CRC*/];
+
+       if (off != 0)
+               return 0;
+       if (!buf)
+               return -EINVAL;
+
+       mutex_lock(&sl->master->bus_mutex);
+
+       /* Read no more than page1 size */
+       if (count > DS2438_PAGE_SIZE)
+               count = DS2438_PAGE_SIZE;
+
+       if (w1_ds2438_get_page(sl, 1, w1_buf) == 0) {
+               memcpy(buf, &w1_buf, count);
+               ret = count;
+       } else
+               ret = -EIO;
+
+       mutex_unlock(&sl->master->bus_mutex);
+
+       return ret;
+}
+
 static ssize_t temperature_read(struct file *filp, struct kobject *kobj,
                                struct bin_attribute *bin_attr, char *buf,
                                loff_t off, size_t count)
 
 static BIN_ATTR_RW(iad, 0);
 static BIN_ATTR_RO(page0, DS2438_PAGE_SIZE);
+static BIN_ATTR_RO(page1, DS2438_PAGE_SIZE);
 static BIN_ATTR_RO(temperature, 0/* real length varies */);
 static BIN_ATTR_RO(vad, 0/* real length varies */);
 static BIN_ATTR_RO(vdd, 0/* real length varies */);
 static struct bin_attribute *w1_ds2438_bin_attrs[] = {
        &bin_attr_iad,
        &bin_attr_page0,
+       &bin_attr_page1,
        &bin_attr_temperature,
        &bin_attr_vad,
        &bin_attr_vdd,