gb_svc_connection_create(hd->svc,
                                         hd->endo->ap_intf_id, hd_cport_id,
                                         bundle->intf->interface_id, cport_id);
+               if (hd->driver->connection_create)
+                       hd->driver->connection_create(connection);
        }
 
        gb_connection_bind_protocol(connection);
        list_del(&connection->hd_links);
        spin_unlock_irq(&gb_connections_lock);
 
+       if (connection->hd->driver->connection_destroy)
+               connection->hd->driver->connection_destroy(connection);
+
        if (connection->protocol)
                gb_protocol_put(connection->protocol);
        connection->protocol = NULL;
 
 struct greybus_host_driver {
        size_t  hd_priv_size;
 
+       void (*connection_create)(struct gb_connection *connection);
+       void (*connection_destroy)(struct gb_connection *connection);
        int (*message_send)(struct greybus_host_device *hd, u16 dest_cport_id,
                        struct gb_message *message, gfp_t gfp_mask);
        void (*message_cancel)(struct gb_message *message);