greybus: battery: some hooking up to the greybus core
authorGreg Kroah-Hartman <greg@kroah.com>
Mon, 20 Oct 2014 07:24:57 +0000 (15:24 +0800)
committerGreg Kroah-Hartman <greg@kroah.com>
Mon, 20 Oct 2014 07:24:57 +0000 (15:24 +0800)
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/staging/greybus/battery-gb.c
drivers/staging/greybus/connection.c
drivers/staging/greybus/greybus.h
drivers/staging/greybus/greybus_manifest.h
drivers/staging/greybus/operation.c

index 685cff5ff9e89da1417807b083444de44ab7c284..3288101c6319add58eb4f08869b1a7aabf60f334 100644 (file)
@@ -18,7 +18,10 @@ struct gb_battery {
        // we will want to keep the battery stats in here as we will be getting
        // updates from the SVC "on the fly" so we don't have to always go ask
        // the battery for some information.  Hopefully...
-       struct gb_module *gmod;
+       struct gb_connection *connection;
+       u8 version_major;
+       u8 version_minor;
+
 };
 #define to_gb_battery(x) container_of(x, struct gb_battery, bat)
 
@@ -111,8 +114,7 @@ static enum power_supply_property battery_props[] = {
        POWER_SUPPLY_PROP_VOLTAGE_NOW,
 };
 
-int gb_battery_probe(struct gb_module *gmod,
-                    const struct greybus_module_id *id)
+int gb_battery_device_init(struct gb_connection *connection)
 {
        struct gb_battery *gb;
        struct power_supply *b;
@@ -122,6 +124,8 @@ int gb_battery_probe(struct gb_module *gmod,
        if (!gb)
                return -ENOMEM;
 
+       gb->connection = connection;    // FIXME refcount!
+
        b = &gb->bat;
        // FIXME - get a better (i.e. unique) name
        // FIXME - anything else needs to be set?
@@ -131,12 +135,11 @@ int gb_battery_probe(struct gb_module *gmod,
        b->num_properties       = ARRAY_SIZE(battery_props),
        b->get_property         = get_property,
 
-       retval = power_supply_register(&gmod->dev, b);
+       retval = power_supply_register(&connection->interface->gmod->dev, b);
        if (retval) {
                kfree(gb);
                return retval;
        }
-       gmod->gb_battery = gb;
 
        return 0;
 }
index a51b4781a2b6e9d393a981270a864a6619d5b458..c9d524b8274b67ed840583bd9c5b98b6fe923c87 100644 (file)
@@ -203,10 +203,12 @@ int gb_connection_init(struct gb_connection *connection)
        switch (connection->protocol) {
        case GREYBUS_PROTOCOL_I2C:
                return gb_i2c_device_init(connection);
-       case GREYBUS_PROTOCOL_CONTROL:
-       case GREYBUS_PROTOCOL_AP:
        case GREYBUS_PROTOCOL_GPIO:
                return gb_gpio_controller_init(connection);
+       case GREYBUS_PROTOCOL_BATTERY:
+               return gb_battery_device_init(connection);
+       case GREYBUS_PROTOCOL_CONTROL:
+       case GREYBUS_PROTOCOL_AP:
        case GREYBUS_PROTOCOL_UART:
        case GREYBUS_PROTOCOL_HID:
        case GREYBUS_PROTOCOL_VENDOR:
index d4f5d940eeb1524436c1460622f684bed176534e..c09572c70392e32e38fd742468b96e627bbfcfc5 100644 (file)
@@ -265,6 +265,7 @@ void gb_deregister_cport_complete(u16 cport_id);
 extern const struct attribute_group *greybus_module_groups[];
 
 int gb_i2c_device_init(struct gb_connection *connection);
+int gb_battery_device_init(struct gb_connection *connection);
 int gb_gpio_controller_init(struct gb_connection *connection);
 
 int gb_tty_init(void);
index 2f1249a63abdee316285855707f462945f205f75..62023f8cfb098a3501f551af9e7e3ef3bda908eb 100644 (file)
@@ -30,6 +30,7 @@ enum greybus_protocol {
        GREYBUS_PROTOCOL_I2C            = 0x03,
        GREYBUS_PROTOCOL_UART           = 0x04,
        GREYBUS_PROTOCOL_HID            = 0x05,
+       GREYBUS_PROTOCOL_BATTERY        = 0x08,
                /* ... */
        GREYBUS_PROTOCOL_VENDOR         = 0xff,
 };
index 4cbe33e21254385c335ae785f14c9a8ffd4d2aa0..4639212a96da081de410e56c94bee51131e8ff54 100644 (file)
@@ -165,6 +165,7 @@ static gb_operation_recv_handler gb_operation_recv_handlers[] = {
        [GREYBUS_PROTOCOL_I2C]          = gb_operation_recv_none,
        [GREYBUS_PROTOCOL_UART]         = NULL,
        [GREYBUS_PROTOCOL_HID]          = NULL,
+       [GREYBUS_PROTOCOL_BATTERY]      = gb_operation_recv_none,
        [GREYBUS_PROTOCOL_VENDOR]       = NULL,
 };