ideapad: let camera_power node invisiable if no camera
authorIke Panhc <ike.pan@canonical.com>
Thu, 30 Jun 2011 11:50:47 +0000 (19:50 +0800)
committerMatthew Garrett <mjg@redhat.com>
Fri, 5 Aug 2011 18:45:44 +0000 (14:45 -0400)
Signed-off-by: Ike Panhc <ike.pan@canonical.com>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
drivers/platform/x86/ideapad-laptop.c

index 42b9ba7e903caa69f660217af68584c17f0bc987..1612abde5188169935d7919517077a36473f90d2 100644 (file)
@@ -38,6 +38,7 @@
 #define CFG_BT_BIT     (16)
 #define CFG_3G_BIT     (17)
 #define CFG_WIFI_BIT   (18)
+#define CFG_CAMERA_BIT (19)
 
 struct ideapad_private {
        struct rfkill *rfk[IDEAPAD_RFKILL_DEV_NUM];
@@ -208,7 +209,24 @@ static struct attribute *ideapad_attributes[] = {
        NULL
 };
 
+static mode_t ideapad_is_visible(struct kobject *kobj,
+                                struct attribute *attr,
+                                int idx)
+{
+       struct device *dev = container_of(kobj, struct device, kobj);
+       struct ideapad_private *priv = dev_get_drvdata(dev);
+       bool supported;
+
+       if (attr == &dev_attr_camera_power.attr)
+               supported = test_bit(CFG_CAMERA_BIT, &(priv->cfg));
+       else
+               supported = true;
+
+       return supported ? attr->mode : 0;
+}
+
 static struct attribute_group ideapad_attribute_group = {
+       .is_visible = ideapad_is_visible,
        .attrs = ideapad_attributes
 };