>>10
bit位置を示す引数をもう一つ追加。
ledはビットフィールド変数ではなく、byteの方にすれば、

void led_toggle_switch(
unsigned *led: 1,
unsigned bitPos, // 1-7
unsigned char before,
unsigned char after)
{
if(before == 0 && after == 1){
*led ^= (1 << bitPos);
}
}