#define ADM1266_READ_BLACKBOX 0xDE
#define ADM1266_SET_RTC 0xDF
#define ADM1266_GPIO_CONFIG 0xE1
+#define ADM1266_POWERUP_COUNTER 0xE4
#define ADM1266_BLACKBOX_INFO 0xE6
#define ADM1266_PDIO_STATUS 0xE9
#define ADM1266_GPIO_STATUS 0xEA
return 0;
}
+/*
+ * POWERUP_COUNTER (0xE4) is a 2-byte little-endian non-volatile counter
+ * that increments on every device power cycle (datasheet Rev. D, Table
+ * 93). It saturates at 65535 and cannot be reset by the host. Each
+ * blackbox record embeds the counter value at record time, so this live
+ * read is mainly useful for matching a record back to its boot.
+ */
+static int adm1266_powerup_counter_read(struct seq_file *s, void *pdata)
+{
+ struct device *dev = s->private;
+ struct i2c_client *client = to_i2c_client(dev);
+ u8 buf[I2C_SMBUS_BLOCK_MAX];
+ int ret;
+
+ guard(pmbus_lock)(client);
+ ret = i2c_smbus_read_block_data(client, ADM1266_POWERUP_COUNTER, buf);
+ if (ret < 0)
+ return ret;
+ if (ret != 2)
+ return -EIO;
+
+ seq_printf(s, "%u\n", buf[0] | (buf[1] << 8));
+
+ return 0;
+}
+
/*
* Clearing the blackbox is required when the device is configured in
* single-recording mode (BLACKBOX_CONFIG[0] = 0): once the 32-record
adm1266_state_read);
debugfs_create_devm_seqfile(&data->client->dev, "firmware_revision", data->debugfs_dir,
adm1266_firmware_revision_read);
+ debugfs_create_devm_seqfile(&data->client->dev, "powerup_counter", data->debugfs_dir,
+ adm1266_powerup_counter_read);
debugfs_create_file("clear_blackbox", 0200, data->debugfs_dir, data->client,
&adm1266_clear_blackbox_fops);
}