MGMT_OP_GET_ADV_SIZE_INFO,
        MGMT_OP_START_LIMITED_DISCOVERY,
        MGMT_OP_READ_EXT_INFO,
+       MGMT_OP_SET_APPEARANCE,
 };
 
 static const u16 mgmt_events[] = {
        return err;
 }
 
+static int set_appearance(struct sock *sk, struct hci_dev *hdev, void *data,
+                         u16 len)
+{
+       struct mgmt_cp_set_appearance *cp = data;
+       u16 apperance;
+       int err;
+
+       BT_DBG("");
+
+       apperance = le16_to_cpu(cp->appearance);
+
+       hci_dev_lock(hdev);
+
+       if (hdev->appearance != apperance) {
+               hdev->appearance = apperance;
+
+               if (hci_dev_test_flag(hdev, HCI_LE_ADV))
+                       adv_expire(hdev, MGMT_ADV_FLAG_APPEARANCE);
+       }
+
+       err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_APPEARANCE, 0, NULL,
+                               0);
+
+       hci_dev_unlock(hdev);
+
+       return err;
+}
+
 static void read_local_oob_data_complete(struct hci_dev *hdev, u8 status,
                                         u16 opcode, struct sk_buff *skb)
 {
        flags |= MGMT_ADV_FLAG_DISCOV;
        flags |= MGMT_ADV_FLAG_LIMITED_DISCOV;
        flags |= MGMT_ADV_FLAG_MANAGED_FLAGS;
+       flags |= MGMT_ADV_FLAG_APPEARANCE;
        flags |= MGMT_ADV_FLAG_LOCAL_NAME;
 
        if (hdev->adv_tx_power != HCI_TX_POWER_INVALID)
                /* at least 1 byte of name should fit in */
                if (adv_flags & MGMT_ADV_FLAG_LOCAL_NAME)
                        max_len -= 3;
+
+               if (adv_flags & MGMT_ADV_FLAG_APPEARANCE)
+                       max_len -= 4;
        }
 
        if (len > max_len)
                /* at least 1 byte of name should fit in */
                if (adv_flags & MGMT_ADV_FLAG_LOCAL_NAME)
                        max_len -= 3;
+
+               if (adv_flags & (MGMT_ADV_FLAG_APPEARANCE))
+                       max_len -= 4;
        }
 
        return max_len;
        { start_limited_discovery, MGMT_START_DISCOVERY_SIZE },
        { read_ext_controller_info,MGMT_READ_EXT_INFO_SIZE,
                                                HCI_MGMT_UNTRUSTED },
+       { set_appearance,          MGMT_SET_APPEARANCE_SIZE },
 };
 
 void mgmt_index_added(struct hci_dev *hdev)