+static ssize_t show_active_high_flag(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ if (!gpio_evmi)
+ return -ENODEV;
+
+ return snprintf(buf, PAGE_SIZE, "%u\n", (gpio_evmi->flags & GPIOKPF_ACTIVE_HIGH) ? 1 : 0);
+}
+
+static ssize_t store_active_high_flag(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+{
+ unsigned flag;
+
+ if (!gpio_evmi)
+ return -ENODEV;
+
+ sscanf(buf, "%u", &flag);
+
+ if (flag) {
+ gpio_evmi->flags |= GPIOKPF_ACTIVE_HIGH;
+ } else {
+ gpio_evmi->flags &= ~GPIOKPF_ACTIVE_HIGH;
+ }
+
+ return count;
+}
+
+static ssize_t show_drive_inactive_flag(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ if (!gpio_evmi)
+ return -ENODEV;
+
+ return snprintf(buf, PAGE_SIZE, "%u\n", (gpio_evmi->flags & GPIOKPF_DRIVE_INACTIVE) ? 1 : 0);
+}
+
+static ssize_t store_drive_inactive_flag(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+{
+ unsigned flag;
+
+ if (!gpio_evmi)
+ return -ENODEV;
+
+ sscanf(buf, "%u", &flag);
+
+ if (flag) {
+ gpio_evmi->flags |= GPIOKPF_DRIVE_INACTIVE;
+ } else {
+ gpio_evmi->flags &= ~GPIOKPF_DRIVE_INACTIVE;
+ }
+
+ return count;
+}
+